this->
BindKey(
"dim_idx", &dim_idx);
95 static const unsignedsize_split[] = {
96256, 512, 2048, 4096, 8192, 16384, 32768
98 const unsignedkMaxSize = (unsigned)(
sizeof(size_split) /
sizeof(*size_split));
100 for(
unsigned i= 0;
i< kMaxSize; ++
i) {
101 if(blob_size < size_split[
i]) {
130 unsignedrec_max = 3 * 1000000)
148(
size_t)coord[1] + 1);
157 m_VolS(
i, coord[1]) += blob_size;
191 doublevol_max = 1.5 * (1024.00*1024.00*1024.00),
192 unsignedrec_max = 3 * 1000000)
204 if( !
m_Path.empty() ) {
211 "error saving demultiplex data: "<< e.
what());
222ostr <<
m_RecS(
i, j) <<
" ";
229ostr <<
m_VolS(
i, j) <<
" ";
355 template<
classTBV,
classTObjDeMux=CBDB_BlobDeMux,
classTL=CFastMutex>
397 void Open(
const string& storage_name,
479 const unsigned* old_coord,
489 const unsigned* coords,
503 const unsigned* coords2);
515 const unsigned* coords,
530 const unsigned* coords,
564 const unsigned* coords,
606SLockedDb&
GetDb(
unsignedvol,
unsignedslice,
658 template<
classTBV,
classTObjDeMux,
classTL>
663m_VolumeCacheSize(0),
670m_AllProjAvail(
false),
671m_RevSplitOff(
false)
682 template<
classTBV,
classTObjDeMux,
classTL>
689 catch(std::exception& e) {
691<<
"CBDB_BlobSplitStore<>::~CBDB_BlobSplitStore(): " 692 "error in CloseVolumes(): "<< e.what());
700 catch(std::exception& e) {
702<<
"CBDB_BlobSplitStore<>::~CBDB_BlobSplitStore(): " 703 "error in Save(): "<< e.what());
707 template<
classTBV,
classTObjDeMux,
classTL>
711m_RevSplitOff =
true;
715 template<
classTBV,
classTObjDeMux,
classTL>
723 template<
classTBV,
classTObjDeMux,
classTL>
727 for(
size_t i= 0;
i< m_Volumes.size(); ++
i) {
733 template<
classTBV,
classTObjDeMux,
classTL>
736 const unsigned* coords1,
737 const unsigned* coords2)
739 returncoords1[0] == coords2[0] &&
740coords1[1] == coords2[1];
743 template<
classTBV,
classTObjDeMux,
classTL>
748m_IdDeMux->GetIdVector(bv);
752 template<
classTBV,
classTObjDeMux,
classTL>
756 const unsigned* coords)
758 unsignedold_coord[2];
762found = m_IdDeMux->GetCoordinatesFast(
id, old_coord);
764 if(found && IsSameCoordinates(old_coord, coords)) {
770m_IdDeMux->SetCoordinatesFast(
id, coords);
775 template<
classTBV,
classTObjDeMux,
classTL>
782 returnthis->Insert(
id,
data,
size, coord);
787 template<
classTBV,
classTObjDeMux,
classTL>
800found = m_IdDeMux->GetCoordinatesFast(
id, coord);
808TLockGuard
lg(m_ObjDeMuxLock);
809m_ObjDeMux->GetCoordinates((
unsigned)
size, coord);
814m_IdDeMux->SetCoordinatesFast(
id, coord);
817SLockedDb& dbp = this->GetDb(coord[0], coord[1], eGetWrite);
819TLockGuard
lg(*dbp.lock);
820dbp.db->SetTransaction(GetTransaction());
822 returndbp.db->Insert(
data,
size);
826 template<
classTBV,
classTObjDeMux,
classTL>
833 returnthis->UpdateInsert(
id,
data,
size, coord);
837 template<
classTBV,
classTObjDeMux,
classTL>
847found = m_IdDeMux->GetCoordinatesFast(
id, coord);
850 returnthis->Insert(
id,
data,
size, coord);
853 unsignedslice = m_ObjDeMux->SelectSplit(
size);
854 if(slice != coord[1]) {
856TLockGuard
lg(m_CrossDBLock);
859 returnthis->Insert(
id,
data,
size, coord);
861SLockedDb& dbp = this->GetDb(coord[0], coord[1], eGetWrite);
862TLockGuard
lg(*(dbp.lock));
863dbp.db->SetTransaction(GetTransaction());
865 returndbp.db->UpdateInsert(
data,
size);
869 template<
classTBV,
classTObjDeMux,
classTL>
872 const unsigned* old_coord,
883found = m_IdDeMux->GetCoordinatesFast(
id, coord);
887 if(old_coord[0] != coord[0] || old_coord[1] != coord[1]) {
896 returnthis->Insert(
id,
data,
size, coord);
900coord[0] = old_coord[0];
901coord[1] = old_coord[1];
904 returnthis->Insert(
id,
data,
size, coord);
907 unsignedslice = m_ObjDeMux->SelectSplit(
size);
908 if(slice != coord[1]) {
913 returnthis->Insert(
id,
data,
size, coord);
915 SLockedDb& dbp = this->GetDb(coord[0], coord[1], eGetWrite);
917dbp.
db->SetTransaction(GetTransaction());
925 template<
classTBV,
classTObjDeMux,
classTL>
934found = m_IdDeMux->GetCoordinatesFast(
id, coord);
939 returnthis->Delete(
id, coord, on_error);
942 template<
classTBV,
classTObjDeMux,
classTL>
945 const unsigned* coords,
951m_IdDeMux->SetCoordinatesFast(
id, coords,
false);
954 SLockedDb& dbp = this->GetDb(coords[0], coords[1], eGetWrite);
957dbp.
db->SetTransaction(GetTransaction());
959 returndbp.
db->Delete(on_error);
965 template<
classTBV,
classTObjDeMux,
classTL>
973found = m_IdDeMux->GetCoordinatesFast(
id, coord);
978 returnthis->CreateReader(
id, coord);
981 template<
classTBV,
classTObjDeMux,
classTL>
985 const unsigned* coords)
990 SLockedDb& dbp = this->GetDb(coords[0], coords[1], eGetRead);
996db = dbp.
db.
get();
1012 template<
classTBV,
classTObjDeMux,
classTL>
1016m_IdDeMux->FreeUnusedMem();
1018 template<
classTBV,
classTObjDeMux,
classTL>
1026 template<
classTBV,
classTObjDeMux,
classTL>
1034curr_trans = this->GetBDBTransaction();
1036curr_trans->
Remove(
this);
1040curr_trans = db_trans;
1044curr_trans->
Add(
this);
1051 template<
classTBV,
classTObjDeMux,
classTL>
1055 for(
size_t i= 0;
i< m_Volumes.size(); ++
i) {
1060 for(
size_tj = 0; j < v->
db_vect.size(); ++j) {
1062 if(db && db->
db) {
1070 template<
classTBV,
classTObjDeMux,
classTL>
1073 const unsigned* coords,
1083 SLockedDb& dbp = this->GetDb(coords[0], coords[1], eGetRead);
1089db = dbp.
db.
get();
1098ret = db->
Fetch(
buf, buf_size, allow_realloc);
1110 template<
classTBV,
classTObjDeMux,
classTL>
1122found = m_IdDeMux->GetCoordinatesFast(
id, coord);
1127 returnthis->Fetch(
id, coord,
buf, buf_size, allow_realloc, blob_size);
1130 template<
classTBV,
classTObjDeMux,
classTL>
1139found = m_IdDeMux->GetCoordinatesFast(
id, coord);
1147 template<
classTBV,
classTObjDeMux,
classTL>
1151 const unsigned* coords,
1159 SLockedDb& dbp = this->GetDb(coords[0], coords[1], eGetRead);
1165db = dbp.
db.
get();
1181 template<
classTBV,
classTObjDeMux,
classTL>
1191found = m_IdDeMux->GetCoordinatesFast(
id, coord);
1196 returnthis->ReadRealloc(
id, coord,
buffer);
1199 template<
classTBV,
classTObjDeMux,
classTL>
1208found = m_IdDeMux->GetCoordinatesFast(
id, coord);
1213 returnthis->BlobSize(
id, coord, blob_size);
1216 template<
classTBV,
classTObjDeMux,
classTL>
1219 const unsigned* coords,
1225 SLockedDb& dbp = this->GetDb(coords[0], coords[1], eGetRead);
1231db = dbp.
db.
get();
1251 template<
classTBV,
classTObjDeMux,
classTL>
1258m_StorageName = storage_name;
1259m_OpenMode = open_mode;
1260m_DB_Type = db_type;
1267LoadIdDeMux(*m_IdDeMux, *m_DictFile);
1271 template<
classTBV,
classTObjDeMux,
classTL>
1275 returnm_DictFile.get() ?
true:
false;
1278 template<
classTBV,
classTObjDeMux,
classTL>
1282 unsignedmax_split = m_ObjDeMux->GetSplitSize();
1283 unsignedmax_vol = m_ObjDeMux->GetVolumeSize();
1284 if(!max_split || !max_vol) {
1288 for(
unsigned i= 0;
i< max_vol; ++
i) {
1289 for(
unsignedj = 0; j < max_split; ++j) {
1290this->GetDb(
i, j, eGetRead);
1293m_AllProjAvail =
true;
1294this->Save(TDeMuxStore::eNoCompact);
1297 template<
classTBV,
classTObjDeMux,
classTL>
1303m_DictFile->SetEnv(*m_Env);
1305 stringdict_fname(m_StorageName);
1306dict_fname.append(
".splitd");
1308m_DictFile->Open(dict_fname.c_str(), m_OpenMode);
1310m_IdDeMux.reset(
new TIdDeMux(2));
1313 template<
classTBV,
classTObjDeMux,
classTL>
1329 unsigneddim = dict_file.
dim;
1330 unsigneddim_idx = dict_file.
dim_idx;
1340 template<
classTBV,
classTObjDeMux,
classTL>
1345 if( m_IdDeMux.get() && m_DictFile.get() ) {
1350this->SaveIdDeMux(*m_IdDeMux, *m_DictFile, 0, compact_vectors);
1355 template<
classTBV,
classTObjDeMux,
classTL>
1365 size_t N= de_mux.
GetN();
1366 for(
size_t i= 0;
i<
N; ++
i) {
1369 for(
size_tj = 0; j < dv.size(); ++j) {
1384 template<
classTBV,
classTObjDeMux,
classTL>
1388 if(splice < m_PageSizes.size())
1389 returnm_PageSizes[splice];
1393 template<
classTBV,
classTObjDeMux,
classTL>
1410 returnm_StorageName +
"_"+
1414 template<
classTBV,
classTObjDeMux,
classTL>
1419 if(ldb->
lock.
get() == 0) {
1429 template<
classTBV,
classTObjDeMux,
classTL>
1442 if(m_AllProjAvail) {
1444 _ASSERT(m_Volumes.size() > vol);
1445 _ASSERT((m_Volumes[vol])->db_vect.size() > slice);
1447 SVolume& volume = *(m_Volumes[vol]);
1448lp = &*volume.
db_vect[slice];
1458 if((m_Volumes.size() > vol) &&
1459((m_Volumes[vol])->db_vect.size() > slice)) {
1460 SVolume& volume = *(m_Volumes[vol]);
1461lp = &*volume.
db_vect[slice];
1462 if(lp->
db.
get()) {
1470 while(m_Volumes.size() < (vol+1)) {
1471unique_ptr<SVolume> v(
new SVolume);
1472v->db_vect.resize(slice+1);
1473 for(
size_t i= 0;
i< v->db_vect.size(); ++
i) {
1474 if( !v->db_vect[
i] ) {
1478m_Volumes.push_back(v.release());
1481 SVolume& volume = *(m_Volumes[vol]);
1482 if(volume.
db_vect.size() <= slice) {
1483volume.
db_vect.resize(slice+1);
1484 for(
size_t i= 0;
i< volume.
db_vect.size(); ++
i) {
1491lp = &*volume.
db_vect[slice];
1494 boolneeds_save =
false;
1501 if(lp->
db.
get() == 0) {
1502 stringfname = this->MakeDbFileName(vol, slice);
1506lp->
db->SetEnv(*m_Env);
1509lp->
db_ro->SetEnv(*m_Env);
1511 if(m_VolumeCacheSize) {
1512lp->
db->SetCacheSize(m_VolumeCacheSize);
1515 unsignedpage_size = GetPageSize(slice);
1517lp->
db->SetPageSize(page_size);
1525lp->
db->SetBtreeMinKeysPerPage(6);
1531lp->
db->SetBtreeMinKeysPerPage(3);
1540 if(m_RevSplitOff) {
1541lp->
db->RevSplitOff();
1544lp->
db->Open(fname.c_str(), m_OpenMode);
1545lp->
db->SetCachePriority(m_CachePriority);
1548lp->
db_ro->SetCachePriority(m_CachePriority);
1557get_mode == eGetWrite) {
1559this->Save(TDeMuxStore::eNoCompact);
BDB library BLOB support.
Berkeley BDB file cursor.
Wrapper around Berkeley DB transaction structure.
Split demux which can save and load state into a file Stateful (persistent) class.
Base class for page-split demultiplexers.
BLOB demultiplexer implements round-robin volume rotation.
Volume split BLOB demultiplexer.
BLOB storage based on single unsigned integer key Supports BLOB volumes and different base page size ...
Persistent storage for demux information.
Basic template class for bitvector storage.
BDB environment object a collection including support for some or all of caching, locking,...
Berkeley DB file cursor class.
Variant of BLOB storage for integer key database.
Raw file class wraps up basic Berkeley DB operations.
Id to coordinates demultiplexer.
size_t GetN() const
Get order of Multiplexer.
const TDimVector & GetDimVector(size_t i) const
Get dimension vector.
void SetProjection(size_t i, size_t idx, TBitVector *bv)
Assign projection idx for dimension i.
vector< TBitVectorPtr > TDimVector
Dimension vector.
void Resize(size_t i, size_t j, T val=T())
resize this matrix, filling the empty cells with a known value
size_t GetRows() const
get the number of rows in this matrix
size_t GetCols() const
get the number of columns in this matrix
Reallocable memory buffer (no memory copy overhead) Mimics vector<>, without the overhead of explicit...
Thread local transactional object.
A very basic data-read interface.
Include a standard set of the NCBI C++ Toolkit most basic headers.
The NCBI C++ standard methods for dealing with std::string.
void reset(element_type *p=0, EOwnership ownership=eTakeOwnership)
Reset will delete the old pointer (if owned), set content to the new value, and assume the ownership ...
element_type * get(void) const
Get pointer.
CBDB_Env * GetEnv(void) const
Get pointer on file environment Return NULL if no environment has been set.
void Save(CNcbiOstream &ostr)
TL::TWriteLockGuard TLockGuard
unique_ptr< TDeMuxStore > m_DictFile
Split dictionary(id demux file)
SLockedDb & GetDb(unsigned vol, unsigned slice, EGetDB_Mode get_mode)
Get database pair (method opens and mounts database if necessary)
void InitDbMutex(SLockedDb *ldb)
Init database mutex lock (mathod is protected against double init)
IReader * CreateReader(unsigned id)
Create stream oriented reader.
CBDB_RawFile::EOpenMode m_OpenMode
CBDB_BlobStoreDict< TBV > TDeMuxStore
void OpenProjections()
Try to open all storage files in all projections This is only possible when object de-mux has fixed n...
size_t LobSize() const
Get LOB size. Becomes available right after successfull Fetch.
const string & GetFileName() const
Return the base filename of the underlying split store.
void SaveIdDeMux(const TIdDeMux &de_mux, TDeMuxStore &dict_file, CBDB_Transaction *trans, typename TDeMuxStore::ECompact compact_vectors)
Store id demux (projection vectors) into the database file.
void Load(CNcbiIstream &istr)
TLock m_CrossDBLock
Lock used to sync. muli-db transactions to avoid deadlocks.
bool IsSameCoordinates(const unsigned *coords1, const unsigned *coords2)
Returns true if two sets of coordinates are the same.
EBDB_ErrCode Delete(unsigned id, CBDB_RawFile::EIgnoreError on_error=CBDB_RawFile::eThrowOnError)
Delete BLOB.
EBDB_ErrCode ReadRealloc(TBuffer &buffer)
Read BLOB into vector.
CBDB_BlobDeMux(double vol_max=1.5 *(1024.00 *1024.00 *1024.00), unsigned rec_max=3 *1000000)
EBDB_ErrCode WriteVector(const TBitVector &bv, ECompact compact)
Save a bitvector to the store.
CNcbiMatrix< unsigned > TVolumeRecs
EBDB_ErrCode Insert(unsigned id, const void *data, size_t size, unsigned *coord)
Insert BLOB into the storage.
EBDB_ErrCode BlobSize(unsigned id, const unsigned *coords, size_t *blob_size)
unique_ptr< TObjDeMux > m_ObjDeMux
Obj to coordinates mapper.
CBDB_IdBlobFile TBlobFile
CBDB_RawFile::EDBType m_DB_Type
bool m_RevSplitOff
Flag carrying reverse split status.
void Sync()
Sync the underlying stores.
CBDB_FieldUint4 dim
dimention
CBDB_RawFile::ECachePriority m_CachePriority
static unsigned SelectSplit(size_t blob_size)
LOBs are getting split into slices based on LOB size, similar BLOBs go to the compartment with more o...
virtual void SetTransaction(ITransaction *trans)
Establish transaction association.
void FreeUnusedMem()
Reclaim unused memory.
EBDB_ErrCode Insert(unsigned id, const void *data, size_t size)
vector< CRef< SLockedDb > > db_vect
void RevSplitOff()
Turn off reverse splitting on the underlying stores.
EBDB_ErrCode UpdateInsert(unsigned id, const void *data, size_t size)
CBDB_Transaction * GetBDBTransaction()
void OpenDict()
Open split storage dictionary.
CBDB_BvStore< TBV > TParent
EBDB_ErrCode ReadRealloc(unsigned id, CBDB_RawFile::TBuffer &buffer)
Read BLOB into vector.
AutoPtr< TLock > lock_ro
db lock for reads
CBDB_BlobSplitStore(TObjDeMux *de_mux)
Construction The main parameter here is object demultiplexer for splitting incoming LOBs into volumes...
EBDB_ErrCode ReadRealloc(unsigned id, const unsigned *coords, CBDB_RawFile::TBuffer &buffer)
Read BLOB into vector using provided coordinates If BLOB does not fit, method resizes the vector to a...
bool IsOpen() const
Return true if the split store has been opened.
AutoPtr< TBlobFile > db
database file
void GetCoordinates(unsigned blob_size, unsigned *coord)
coordinates:
TVolumeRecs m_RecS
Volumes record counts.
string MakeDbFileName(unsigned vol, unsigned slice)
Make BDB file name based on volume and page size split.
EBDB_ErrCode UpdateInsert(unsigned id, const unsigned *old_coord, const void *data, size_t size, unsigned *coord)
Update or insert BLOB using old coordinates.
EBDB_ErrCode Fetch()
Fetch the record corresponding to the current key value.
TBuffer & GetBuffer()
Get access to the internal buffer.
CBDB_BlobDeMuxPersistent(const string &path, double vol_max=1.5 *(1024.00 *1024.00 *1024.00), unsigned rec_max=3 *1000000)
void SetVolumeCacheSize(unsigned int cache_size)
TVolumeVect m_Volumes
Volumes.
unsigned GetVolumeSize() const
Returns total number of volumes (vertical projection) If method returns 0 - means there is no hard nu...
AutoPtr< TLock > lock
db lock
CBDB_BlobSplitStore(const CBDB_BlobSplitStore< TBV, TObjDeMux, TL > &)
forbidden
void Deserialize(TBitVector *bv, const TBufferValue *buf)
EBDB_ErrCode Delete(unsigned id, const unsigned *coords, CBDB_RawFile::EIgnoreError on_error=CBDB_RawFile::eThrowOnError)
EBDB_ErrCode UpdateInsert(unsigned id, const void *data, size_t size, unsigned *coord)
Update or insert BLOB.
void GetCoordinates(unsigned blob_size, unsigned *coord)
coordinates:
void LoadIdDeMux(TIdDeMux &de_mux, TDeMuxStore &dict_file)
void Save(typename TDeMuxStore::ECompact compact_vectors=TDeMuxStore::eCompact)
Save storage dictionary (demux disposition).
IReader * CreateReader(unsigned id, const unsigned *coords)
void SetCachePriority(CBDB_RawFile::ECachePriority)
Set the priority for this database's pages in the buffer cache This is generally a temporary adviseme...
unsigned m_RecMax
Maximum number of records.
IReader * CreateReader()
Creates stream like object to read BLOB by chunks.
void CloseVolumes()
Close volumes without saving or doing anything with id demux.
double m_VolMax
Volume max size.
TVolumeSize m_VolS
Volumes BLOB sizes.
EBDB_ErrCode Fetch(unsigned id, void **buf, size_t buf_size, CBDB_RawFile::EReallocMode allow_realloc, size_t *blob_size)
Fetch LOB record directly into the provided '*buf'.
EGetDB_Mode
Read or write operation.
vector< SVolume * > TVolumeVect
CBDB_FieldUint4 dim_idx
projection index
void SetEnv(CBDB_Env &env)
Associate with the environment. Should be called before opening.
unsigned GetVolumeSize() const
Returns total number of volumes (vertical projection) If method returns 0 - means there is no hard nu...
unsigned GetPageSize(unsigned splice) const
Select preferred page size for the specified slice.
EBDB_ErrCode BlobSize(unsigned id, size_t *blob_size)
Get size of the BLOB.
vector< unsigned > m_PageSizes
TLock m_VolumesLock
Volumes locker.
CBDB_FieldUint4 id
ID key.
EBDB_ErrCode Fetch(unsigned id, const unsigned *coords, void **buf, size_t buf_size, CBDB_RawFile::EReallocMode allow_realloc, size_t *blob_size)
unsigned m_VolumeCacheSize
CBDB_BlobDeMux_RoundRobin(unsigned volumes=0)
TLock m_DictFileLock
id demux file locker
void GetIdVector(TBitVector *bv) const
Get all id of all BLOBs stored.
CBDB_BlobSplitStore< TBV, TObjDeMux, TL > & operator=(const CBDB_BlobSplitStore< TBV, TObjDeMux, TL > &)
EBDB_ErrCode GetCoordinates(unsigned id, unsigned *coords)
Find (demux) coordinates by BLOB id.
CNcbiMatrix< double > TVolumeSize
ECompact
Compression options for vector storage.
unique_ptr< TIdDeMux > m_IdDeMux
Id to coordinates mapper.
EBDB_ErrCode FetchToBuffer(CBDB_FileCursor &cur)
Fetch the next BLOB record to the resiable buffer.
~CBDB_BlobDeMuxPersistent()
void Open(const string &storage_name, CBDB_RawFile::EOpenMode open_mode, CBDB_RawFile::EDBType db_type=CBDB_RawFile::eBtree)
Open storage (reads storage dictionary into memory)
AutoPtr< TBlobFile > db_ro
database file for reads
unsigned GetSplitSize() const
Returns total number of splits (horizontal projection) If method returns 0 - means there is no hard n...
void AssignCoordinates(unsigned id, const unsigned *coords)
Assing de-mux coordinates.
bool m_AllProjAvail
True when all proj.dbs are pre-open.
EBDB_ErrCode Delete(EIgnoreError on_error=eThrowOnError)
Delete record corresponding to the current key value.
void SetCondition(ECondition cond_from, ECondition cond_to=eNotSet)
Set search condition(type of interval)
EOpenMode
BDB file open mode.
EDBType
Berkeley DB database type.
virtual void SetTransaction(ITransaction *trans)
Establish transaction association.
void BindKey(const char *field_name, CBDB_Field *key_field, size_t buf_size=0)
EReallocMode
BLOB read mode, controld data buffer reallocation when there is not enough space in buffer.
ECachePriority
Set the priority for this database's pages in the buffer cache This is generally a temporary adviseme...
EBDB_ErrCode
BDB Return codes.
CBDB_ConditionHandle From
@ eReadWriteCreate
read-write, create if it doesn't exist
EKeepFileAssociation GetAssociationMode() const
Transaction file association mode.
virtual void Add(ITransactional *dbfile)
Add file to the list of connected files.
static CBDB_Transaction * CastTransaction(ITransaction *trans)
Downcast ITransaction.
virtual void Remove(ITransactional *dbfile)
Remove file from the list of connected files.
@ eFullAssociation
Transaction associated with files.
#define ERR_POST_XX(error_name, err_subcode, message)
Error posting with error code having given name and with given error subcode.
void Error(CExceptionArgs_Base &args)
virtual const char * what(void) const noexcept
Standard report (includes full backlog).
uint32_t Uint4
4-byte (32-bit) unsigned integer
#define END_NCBI_SCOPE
End previously defined NCBI scope.
#define BEGIN_NCBI_SCOPE
Define ncbi namespace.
IO_PREFIX::ofstream CNcbiOfstream
Portable alias for ofstream.
IO_PREFIX::ostream CNcbiOstream
Portable alias for ostream.
IO_PREFIX::istream CNcbiIstream
Portable alias for istream.
IO_PREFIX::ifstream CNcbiIfstream
Portable alias for ifstream.
static string UIntToString(unsigned int value, TNumToStringFlags flags=0, int base=10)
Convert UInt to string.
CGuard< CRWLock, SSimpleWriteLock< CRWLock > > TWriteLockGuard
virtual void SetTransaction(ITransaction *trans)
Establish transaction association.
@ BM_GAP
GAP compression is ON.
Classes and interfaces to map integer ids into multi-dimension coordinates.
Definition of all error codes used in bdb library (bdb.lib and ncbi_xcache_bdb.lib).
const struct ncbi::grid::netcache::search::fields::SIZE size
Defines classes: CDirEntry, CFile, CDir, CSymLink, CMemoryFile, CFileUtil, CFileLock,...
Multi-threading â mutexes; rw-locks; semaphore.
NCBI C++ stream class wrappers for triggering between "new" and "old" C++ stream libraries.
static SLJIT_INLINE sljit_ins lg(sljit_gpr r, sljit_s32 d, sljit_gpr x, sljit_gpr b)
BDB Database together with the locker One database is opened twice, one regular mode,...
Volume split on optimal page size.
Abstract object demultiplexer.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4