 |
threaddb
2.0b
A file mapped memory container extension
|
Go to the documentation of this file.
44 size_t size()
const {
return sizeof(T); }
55 size_(
const std::string& rS_p) : m_size(rS_p.
size()) {}
56 size_t size()
const {
return m_size; }
69 m_cptr((const char*)&rVal_p)
74 m_cptr((const char*)&rVal_p)
78 const char*
get()
const
114 std::unique_ptr<T> pT(
new T());
115 pDb_p->
Recover(
sizeof(T), (
char*)pT.get(), *pItemInfo_p, Package_p);
121 return get(pDb_p, pItemInfo_p, Package_p);
126 std::unique_ptr<T> pT(
new T());
127 pDb_p->
Recover(
sizeof(T), (
char*)pT.get(), *pReadInfo_p);
131 std::unique_ptr<std::string>
get()
const
133 return std::unique_ptr<std::string>(
new std::string());
151 m_size(sizeof(size_t) + rVal_p.
size()),
152 m_cptr((char*)malloc(m_size)),
155 *((
size_t*)m_cptr) = rVal_p.size();
156 memcpy((
void*)(m_cptr +
sizeof(
size_t)), (
void*)rVal_p.c_str(), rVal_p.size());
160 m_size(size_p.
size()),
161 m_cptr(rVal_p.c_str()),
202 m_size(size_p.
size())
209 pDb_p->
Recover(
sizeof(m_size), (
char*)&m_size, *pReadInfo_p);
214 size_t size_ = m_size +
sizeof(m_size);
216 std::vector<char> cbuf(
size_);
217 pDb_p->
Recover(
size_, (
char*)&cbuf[0], *pItemInfo_p, Package_p);
219 std::unique_ptr<std::string> pstr(
new std::string());
220 (*pstr).insert((*pstr).begin(), &cbuf[
sizeof(m_size)], &cbuf[
size_]);
227 std::unique_ptr<std::string> pstr(
new std::string());
228 pstr->resize(Size_p.
size());
229 pDb_p->
Recover(Size_p.
size(), (
char*)pstr->c_str(), *pItemInfo_p, Package_p);
235 std::unique_ptr<std::string> pstr(
new std::string());
236 pstr->resize(m_size);
237 pDb_p->
Recover(m_size, (
char*)pstr->c_str(), *pReadInfo_p);
241 std::unique_ptr<std::string>
get()
const
243 return std::unique_ptr<std::string>(
new std::string());
261 typedef std::pair<ItemInfo, std::atomic<uint8_t>>
ItemHandle;
271 pool(
database& rDb_p, uint32_t ItemLimit_p = std::numeric_limits<uint32_t>::max()) :
276 m_ItemLimit(ItemLimit_p),
277 m_ThreadCount(rDb_p.GetThreadCount()),
278 m_Pidx(new std::pair<uint64_t, uint32_t>[m_ThreadCount])
280 for (
size_t idx(0); idx < m_ThreadCount; ++idx)
282 m_Pidx[idx] = std::make_pair(m_rDb.
NewPackage(), 0);
288 std::lock_guard<std::mutex> deleteLock(m_DeleteLock);
291 for (
auto iter(m_DeletedItems.begin()); iter != m_DeletedItems.end(); )
293 if ((*iter).first->first.Unregistered())
295 delete (*iter).first;
296 iter = m_DeletedItems.erase(iter);
302 if (!m_DeletedItems.empty())
306 }
while (m_DeletedItems.empty() ==
false);
315 const std::pair<uint64_t, uint32_t>&
316 Store(
size_t Size_p,
const char* pData_p,
ItemInfo* pItemInfo_p = 0)
318 std::pair<uint64_t, uint32_t>& rPidx(m_Pidx[increment()]);
319 m_rDb.
Store(rPidx.first, Size_p, pData_p, pItemInfo_p);
327 std::lock_guard<std::mutex> deleteLock(m_DeleteLock);
329 auto iter = m_DeletedItems.begin();
330 if (iter != m_DeletedItems.end())
332 if ((*iter).first->first.m_PackageSize != std::numeric_limits<uint32_t>::max())
334 pItem = (*iter).first;
335 iter = m_DeletedItems.erase(iter);
342 void Delete(
ItemHandle* pItemInfo_p, uint64_t PackageID_p)
344 std::lock_guard<std::mutex> deleteLock(m_DeleteLock);
345 if (pItemInfo_p != 0)
347 if (pItemInfo_p->first.m_PackageSize != std::numeric_limits<uint32_t>::max())
348 m_DeletedItems.push_front(std::make_pair(pItemInfo_p, PackageID_p));
350 m_DeletedItems.push_back(std::make_pair(pItemInfo_p, PackageID_p));
354 database& Db() {
return m_rDb; }
360 const uint32_t packageIdx = m_ItemIndex % m_ThreadCount;
361 std::pair<uint64_t, uint32_t>& rPackageIdx(m_Pidx[packageIdx]);
363 ++(rPackageIdx.second);
364 if (rPackageIdx.second > m_ItemLimit)
366 rPackageIdx = std::make_pair(m_rDb.
NewPackage(), 1);
372 std::mutex m_DeleteLock;
373 std::deque< std::pair<ItemHandle*, uint64_t> > m_DeletedItems;
376 uint32_t m_ItemIndex;
377 uint32_t m_ItemLimit;
378 size_t m_ThreadCount;
379 std::pair<uint64_t, uint32_t>* m_Pidx;
402 m_T(rPool_p.Alloc()),
405 m_Size(
size_<T>(rVal_p))
409 m_Pidx = m_P->Store(byteStream.
size(), byteStream.
get(), &
m_T->first).first;
415 m_Pidx(rhs_p.m_Pidx),
428 m_Pidx = rhs_p.m_Pidx;
439 if (
m_T->second == 0)
441 m_P->Delete(
m_T, m_Pidx);
446 std::unique_ptr<T>
get()
const
481 m_Pidx = m_P->Store(byteStream.
size(), byteStream.
get());
487 m_Pidx = rhs_p.m_Pidx;
490 std::unique_ptr<T>
get()
const
494 m_P->Db().Synchronize(m_Pidx.first);
496 ReadInfo readInfo = m_P->Db().Open(m_Pidx.first);
497 for (
size_t idx(1); idx < m_Pidx.second; ++idx)
500 const size_t bytesToRead = fromStream.
size();
501 if (m_P->Db().Recover(bytesToRead, 0, readInfo) != bytesToRead)
502 throw std::runtime_error(
"Invalid read operation in item data recovery.");
509 std::pair<uint64_t, uint32_t> m_Pidx;
531 return (*this->get()) < (*rhs_p.get());
536 return ((*rhs_p.get() < *this->get()));
T value_type
Definition: threaddbSTLWrapper.h:390
std::unique_ptr< T > get() const
Definition: threaddbSTLWrapper.h:490
size_(const std::string &rS_p)
Definition: threaddbSTLWrapper.h:55
size_t size() const
Definition: threaddbSTLWrapper.h:246
std::unique_ptr< std::string > get(database *pDb_p, ItemInfo *pItemInfo_p, uint64_t Package_p) const
Definition: threaddbSTLWrapper.h:212
C++ wrapper class to the threadDB_ReadInfo control structure.
Definition: threaddbCPP.h:70
std::unique_ptr< T > get(database *pDb_p, ReadInfo *pReadInfo_p) const
Definition: threaddbSTLWrapper.h:124
std::unique_ptr< std::string > get(database *pDb_p, ItemInfo *pItemInfo_p, uint64_t Package_p, size_< std::string > Size_p) const
Definition: threaddbSTLWrapper.h:225
size_t size() const
Definition: threaddbSTLWrapper.h:44
fromstream()
Definition: threaddbSTLWrapper.h:196
C++ wrapper class to the threadDB_ItemInfo control structure.
Definition: threaddbCPP.h:52
tostream(const std::string &rVal_p, size_< std::string > size_p)
Definition: threaddbSTLWrapper.h:159
Interface C++ wrapper classes.
fromstream()
Definition: threaddbSTLWrapper.h:100
pool(database &rDb_p, uint32_t ItemLimit_p=std::numeric_limits< uint32_t >::max())
Definition: threaddbSTLWrapper.h:271
key(const typename T::value_type &rVal_p, pool< typename T::value_type > &rPool_p)
Definition: threaddbSTLWrapper.h:520
ritem(const T &rVal_p, pool< T > &rPool_p)
Definition: threaddbSTLWrapper.h:401
size_t size() const
Definition: threaddbSTLWrapper.h:83
void deref()
Definition: threaddbSTLWrapper.h:436
Wrapper class for storing key data items.
Definition: threaddbSTLWrapper.h:517
void operator=(const sitem &rhs_p)
Definition: threaddbSTLWrapper.h:484
Converter of fixed size data elements into a byte stream representation.
Definition: threaddbSTLWrapper.h:65
tostream(const std::string &rVal_p)
Definition: threaddbSTLWrapper.h:150
void Store(uint64_t Package_p, size_t Size_p, const char pData_p[], threadDB_ItemInfo *pItemHandle_p=0)
C++ wrapper to store a data item in the selected package see ThreadDB_Store.
Definition: threaddbCPP.h:234
Definition: threaddbCPP.h:28
T value_type
Definition: threaddbSTLWrapper.h:468
size_t m_size
Definition: threaddbSTLWrapper.h:57
size_()
Definition: threaddbSTLWrapper.h:42
ItemHandle * m_T
Definition: threaddbSTLWrapper.h:452
void Synchronize(uint64_t Package_p)
C++ wrapper to synchronize the package buffers prior reading see ThreadDB_Synchronize.
Definition: threaddbCPP.h:243
Wrapper class for storing data items in a sequential fashion.
Definition: threaddbSTLWrapper.h:259
Converter of byte stream into fixed data item representation.
Definition: threaddbSTLWrapper.h:97
tostream(const T &rVal_p)
Definition: threaddbSTLWrapper.h:68
sitem()
Definition: threaddbSTLWrapper.h:470
size_(const T &)
Definition: threaddbSTLWrapper.h:43
const char * get() const
Definition: threaddbSTLWrapper.h:172
sitem(const T &rVal_p, pool< T > &rPool_p)
Definition: threaddbSTLWrapper.h:476
std::unique_ptr< std::string > get() const
Definition: threaddbSTLWrapper.h:131
std::unique_ptr< T > get() const
Definition: threaddbSTLWrapper.h:446
std::unique_ptr< std::string > get(database *pDb_p, ReadInfo *pReadInfo_p) const
Definition: threaddbSTLWrapper.h:233
size_()
Definition: threaddbSTLWrapper.h:54
bool operator>(const T &rhs_p) const
Definition: threaddbSTLWrapper.h:534
size_t size() const
Definition: threaddbSTLWrapper.h:56
fromstream(size_< std::string > size_p)
Definition: threaddbSTLWrapper.h:104
size_t size() const
Definition: threaddbSTLWrapper.h:177
~ritem()
Definition: threaddbSTLWrapper.h:431
fromstream(size_< std::string > size_p)
Definition: threaddbSTLWrapper.h:201
~key()
Definition: threaddbSTLWrapper.h:525
ritem()
Definition: threaddbSTLWrapper.h:392
ritem(const ritem &rhs_p)
Definition: threaddbSTLWrapper.h:412
std::pair< ItemInfo, std::atomic< uint8_t > > ItemHandle
Definition: threaddbSTLWrapper.h:259
size_t size() const
Definition: threaddbSTLWrapper.h:136
C++ wrapper class of the threadDB file mapped memory container extension.
Definition: threaddbCPP.h:97
Pool datastructure for keeping track and recycling open ItemHandles.
Definition: threaddbSTLWrapper.h:268
void operator=(const ritem &rhs_p)
Definition: threaddbSTLWrapper.h:421
std::unique_ptr< T > get(database *pDb_p, ItemInfo *pItemInfo_p, uint64_t Package_p) const
Definition: threaddbSTLWrapper.h:112
size_t Recover(size_t Size_p, char pData_p[], tdb::ReadInfo &rReadInfo_p)
C++ wrapper for stream reading of data items see ThreadDB_RecoverContinous.
Definition: threaddbCPP.h:289
fromstream(database *, ReadInfo *)
Definition: threaddbSTLWrapper.h:108
fromstream(database *pDb_p, ReadInfo *pReadInfo_p)
Definition: threaddbSTLWrapper.h:206
uint64_t NewPackage()
C++ wrapper to create and register a threadDB data package see ThreadDB_NewPackage.
Definition: threaddbCPP.h:169
Trait class for size of variable length data items (std::string).
Definition: threaddbSTLWrapper.h:52
~tostream()
Definition: threaddbSTLWrapper.h:166
std::unique_ptr< T > get(database *pDb_p, ItemInfo *pItemInfo_p, uint64_t Package_p, size_< T >) const
Definition: threaddbSTLWrapper.h:119
std::unique_ptr< std::string > get() const
Definition: threaddbSTLWrapper.h:241
const char * get() const
Definition: threaddbSTLWrapper.h:78
Wrapper class for storing data items in a random fashion.
Definition: threaddbSTLWrapper.h:256
~pool()
Definition: threaddbSTLWrapper.h:286
bool operator<(const T &rhs_p) const
Definition: threaddbSTLWrapper.h:529
tostream(const T &rVal_p, size_t)
Definition: threaddbSTLWrapper.h:73
Trait class for size of fixed length data items.
Definition: threaddbSTLWrapper.h:40