You.i Engine
YiPersistentStore.h
Go to the documentation of this file.
1 // © You i Labs Inc. 2000-2017. All rights reserved.
2 #ifndef _YI_PERSISTENT_STORE_H_
3 #define _YI_PERSISTENT_STORE_H_
4 
6 #include "framework/YiPredef.h"
8 #include "signal/YiSignal.h"
9 #include "thread/YiAutoMutex.h"
10 #include "utility/YiString.h"
11 #include "utility/YiUtilities.h"
59 class IYIPersistentStorePriv;
61 {
62 public:
64  {
71  };
72 
73  CYIPersistentStore(uint64_t uMaxSizeInBytes = 0);
75  virtual ~CYIPersistentStore();
76 
78 
86  template <typename T> void Add(const CYIString &Key, const T &value);
87 
98  template <typename T> bool Find(const CYIString &Key, T *value) const;
99 
106  void Remove(const CYIString &key);
107 
111  void Clear();
112 
116  bool Save(const CYIString &sFile);
117 
122  bool Load(const CYIString &sFile);
123 
128  void RequestSave(const CYIString &sFile);
129 
135  void RequestLoad(const CYIString &sFile);
136 
140  bool Clear(const CYIString &sFile);
141 
143 
147  //
149 
153  //
155 
156 private:
157  std::map<CYIString, CYIString> m_StateData;
158  uint64_t m_uPersistentStoreMaxSize;
159  STORE_ERROR m_lastErrorCode;
160  mutable CYIRecursiveMutex m_StateDataMutex;
161 
162  IYIPersistentStorePriv *m_pPriv;
164 };
165 
169 template <typename T>
170 inline
171 void CYIPersistentStore::Add(const CYIString &Key, const T &value)
172 {
173  bool bError = false;
174  CYIString StringValue = CYIString::FromValue(value, &bError);
175  if (!bError)
176  {
177  CYIAutoMutex locker(m_StateDataMutex);
178 
179  m_StateData[Key] = StringValue;
180  }
181  else
182  {
183  YI_LOGE("CYIPersistentStore", "Add failed for key [%s], conversion of value to string failed.", Key.GetData());
184  }
185 }
186 
187 template <typename T>
188 inline
189 bool CYIPersistentStore::Find(const CYIString &Key, T *value) const
190 {
191  CYIAutoMutex locker(m_StateDataMutex);
192  bool bValueFound = false;
193  std::map<CYIString, CYIString>::const_iterator KeyValue = m_StateData.find(Key);
194  if (KeyValue != m_StateData.end())
195  {
196  CYIString sValue = KeyValue->second;
197  bool bError = false;
198  T temporary = sValue.To<T>(&bError);
199  if (!bError)
200  {
201  *value = temporary;
202  bValueFound = true;
203  }
204  else
205  {
206  YI_LOGE("CYIPersistentStore", "Value was found for key [%s] but conversion from string failed.", Key.GetData());
207  }
208  }
209 
210  return bValueFound;
211 }
212 
213 #endif // _YI_PERSISTENT_STORE_H_
Definition: YiPersistentStore.h:67
CYIPersistentStore(uint64_t uMaxSizeInBytes=0)
Definition: YiPersistentStore.h:60
void RequestLoad(const CYIString &sFile)
Container class for Unicode strings. Conceptually, a CYIString object is a sequence of Unicode charac...
Definition: YiString.h:35
bool Find(const CYIString &Key, T *value) const
Definition: YiPersistentStore.h:189
The base class for an object accessible from script source code.
Definition: YiScriptableObject.h:28
Definition: YiRecursiveMutex.h:15
Definition: YiPersistentStore.h:66
virtual ~CYIPersistentStore()
STORE_ERROR GetLastErrorCode() const
Definition: YiPersistentStore.h:65
CYIPersistentStore & operator=(const CYIPersistentStore &rRHS)
#define YI_LOGE(tag, msg,...)
Definition: YiLoggerHelper.h:67
CYISignal< bool > LoadCompleted
Definition: YiPersistentStore.h:154
bool Load(const CYIString &sFile)
Definition: YiPersistentStore.h:70
void Remove(const CYIString &key)
static CYIString FromValue(const T &arg, bool *pbError=nullptr)
Definition: YiAutoMutex.h:23
Definition: YiPersistentStore.h:69
STORE_ERROR
Definition: YiPersistentStore.h:63
Definition: YiPersistentStore.h:68
friend class IYIPersistentStorePriv
Definition: YiPersistentStore.h:163
void RequestSave(const CYIString &sFile)
CYISignal< bool > SaveCompleted
Definition: YiPersistentStore.h:148
T To(bool *pbError=nullptr) const
void Add(const CYIString &Key, const T &value)
Definition: YiPersistentStore.h:171
bool Save(const CYIString &sFile)
const char * GetData() const