1fc223305Sopenharmony_ci/* 2fc223305Sopenharmony_ci * Copyright (c) 2024 Huawei Device Co., Ltd. 3fc223305Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4fc223305Sopenharmony_ci * you may not use this file except in compliance with the License. 5fc223305Sopenharmony_ci * You may obtain a copy of the License at 6fc223305Sopenharmony_ci * 7fc223305Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8fc223305Sopenharmony_ci * 9fc223305Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10fc223305Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11fc223305Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12fc223305Sopenharmony_ci * See the License for the specific language governing permissions and 13fc223305Sopenharmony_ci * limitations under the License. 14fc223305Sopenharmony_ci */ 15fc223305Sopenharmony_ci 16fc223305Sopenharmony_ci#ifndef PREFERENCES_BASE_H 17fc223305Sopenharmony_ci#define PREFERENCES_BASE_H 18fc223305Sopenharmony_ci 19fc223305Sopenharmony_ci#include <any> 20fc223305Sopenharmony_ci#include <condition_variable> 21fc223305Sopenharmony_ci#include <list> 22fc223305Sopenharmony_ci#include <map> 23fc223305Sopenharmony_ci#include <memory> 24fc223305Sopenharmony_ci#include <mutex> 25fc223305Sopenharmony_ci#include <set> 26fc223305Sopenharmony_ci#include <string> 27fc223305Sopenharmony_ci#include <vector> 28fc223305Sopenharmony_ci#include <shared_mutex> 29fc223305Sopenharmony_ci 30fc223305Sopenharmony_ci#include "preferences.h" 31fc223305Sopenharmony_ci#include "preferences_observer.h" 32fc223305Sopenharmony_ci#include "preferences_utils.h" 33fc223305Sopenharmony_ci 34fc223305Sopenharmony_cinamespace OHOS { 35fc223305Sopenharmony_citemplate <typename T> class sptr; 36fc223305Sopenharmony_ciclass Uri; 37fc223305Sopenharmony_cinamespace NativePreferences { 38fc223305Sopenharmony_ciclass ExecutorPool; 39fc223305Sopenharmony_ciclass DataPreferencesObserverStub; 40fc223305Sopenharmony_ci/** 41fc223305Sopenharmony_ci * The function class of the preference. Various operations on preferences instances are provided in this class. 42fc223305Sopenharmony_ci */ 43fc223305Sopenharmony_ciclass PreferencesBase : public Preferences { 44fc223305Sopenharmony_cipublic: 45fc223305Sopenharmony_ci PreferencesBase(const Options &options); 46fc223305Sopenharmony_ci ~PreferencesBase(); 47fc223305Sopenharmony_ci 48fc223305Sopenharmony_ci PreferencesValue Get(const std::string &key, const PreferencesValue &defValue) override; 49fc223305Sopenharmony_ci 50fc223305Sopenharmony_ci int Put(const std::string &key, const PreferencesValue &value) override; 51fc223305Sopenharmony_ci 52fc223305Sopenharmony_ci int GetInt(const std::string &key, const int &defValue) override; 53fc223305Sopenharmony_ci 54fc223305Sopenharmony_ci std::string GetString(const std::string &key, const std::string &defValue) override; 55fc223305Sopenharmony_ci 56fc223305Sopenharmony_ci bool GetBool(const std::string &key, const bool &defValue) override; 57fc223305Sopenharmony_ci 58fc223305Sopenharmony_ci float GetFloat(const std::string &key, const float &defValue) override; 59fc223305Sopenharmony_ci 60fc223305Sopenharmony_ci double GetDouble(const std::string &key, const double &defValue) override; 61fc223305Sopenharmony_ci 62fc223305Sopenharmony_ci int64_t GetLong(const std::string &key, const int64_t &defValue) override; 63fc223305Sopenharmony_ci 64fc223305Sopenharmony_ci std::map<std::string, PreferencesValue> GetAll() override; 65fc223305Sopenharmony_ci 66fc223305Sopenharmony_ci bool HasKey(const std::string &key) override; 67fc223305Sopenharmony_ci 68fc223305Sopenharmony_ci int PutInt(const std::string &key, int value) override; 69fc223305Sopenharmony_ci 70fc223305Sopenharmony_ci int PutString(const std::string &key, const std::string &value) override; 71fc223305Sopenharmony_ci 72fc223305Sopenharmony_ci int PutBool(const std::string &key, bool value) override; 73fc223305Sopenharmony_ci 74fc223305Sopenharmony_ci int PutLong(const std::string &key, int64_t value) override; 75fc223305Sopenharmony_ci 76fc223305Sopenharmony_ci int PutFloat(const std::string &key, float value) override; 77fc223305Sopenharmony_ci 78fc223305Sopenharmony_ci int PutDouble(const std::string &key, double value) override; 79fc223305Sopenharmony_ci 80fc223305Sopenharmony_ci int Delete(const std::string &key) override; 81fc223305Sopenharmony_ci 82fc223305Sopenharmony_ci int Clear() override; 83fc223305Sopenharmony_ci 84fc223305Sopenharmony_ci void Flush() override; 85fc223305Sopenharmony_ci 86fc223305Sopenharmony_ci int FlushSync() override; 87fc223305Sopenharmony_ci 88fc223305Sopenharmony_ci int RegisterObserver(std::shared_ptr<PreferencesObserver> preferencesObserver, 89fc223305Sopenharmony_ci RegisterMode mode = RegisterMode::LOCAL_CHANGE) override; 90fc223305Sopenharmony_ci 91fc223305Sopenharmony_ci int UnRegisterObserver(std::shared_ptr<PreferencesObserver> preferencesObserver, 92fc223305Sopenharmony_ci RegisterMode mode = RegisterMode::LOCAL_CHANGE) override; 93fc223305Sopenharmony_ci 94fc223305Sopenharmony_ci int RegisterDataObserver(std::shared_ptr<PreferencesObserver> preferencesObserver, 95fc223305Sopenharmony_ci const std::vector<std::string> &keys = {}) override; 96fc223305Sopenharmony_ci 97fc223305Sopenharmony_ci int UnRegisterDataObserver(std::shared_ptr<PreferencesObserver> preferencesObserver, 98fc223305Sopenharmony_ci const std::vector<std::string> &keys = {}) override; 99fc223305Sopenharmony_ci 100fc223305Sopenharmony_ci std::string GetGroupId() const override; 101fc223305Sopenharmony_ci 102fc223305Sopenharmony_ci int CloseDb() override; 103fc223305Sopenharmony_ci 104fc223305Sopenharmony_ci std::pair<int, PreferencesValue> GetValue(const std::string &key, const PreferencesValue &defValue) override; 105fc223305Sopenharmony_ci 106fc223305Sopenharmony_ci std::pair<int, std::map<std::string, PreferencesValue>> GetAllData() override; 107fc223305Sopenharmony_ci 108fc223305Sopenharmony_ciprotected: 109fc223305Sopenharmony_ci Uri MakeUri(const std::string &key = ""); 110fc223305Sopenharmony_ci struct WeakPtrCompare { 111fc223305Sopenharmony_ci bool operator()(const std::weak_ptr<PreferencesObserver> &a, const std::weak_ptr<PreferencesObserver> &b) const 112fc223305Sopenharmony_ci { 113fc223305Sopenharmony_ci return a.owner_before(b); 114fc223305Sopenharmony_ci } 115fc223305Sopenharmony_ci }; 116fc223305Sopenharmony_ci using DataObserverMap = std::map<std::weak_ptr<PreferencesObserver>, std::set<std::string>, WeakPtrCompare>; 117fc223305Sopenharmony_ci std::mutex mutex_; 118fc223305Sopenharmony_ci std::shared_mutex obseverMetux_; 119fc223305Sopenharmony_ci std::condition_variable cond_; 120fc223305Sopenharmony_ci 121fc223305Sopenharmony_ci std::vector<std::weak_ptr<PreferencesObserver>> localObservers_; 122fc223305Sopenharmony_ci std::vector<sptr<DataPreferencesObserverStub>> multiProcessObservers_; 123fc223305Sopenharmony_ci DataObserverMap dataObserversMap_; 124fc223305Sopenharmony_ci 125fc223305Sopenharmony_ci const Options options_; 126fc223305Sopenharmony_ci 127fc223305Sopenharmony_ci static ExecutorPool executorPool_; 128fc223305Sopenharmony_ci}; 129fc223305Sopenharmony_ci} // End of namespace NativePreferences 130fc223305Sopenharmony_ci} // End of namespace OHOS 131fc223305Sopenharmony_ci#endif // End of #ifndef PREFERENCES_H