<
typenameTRoot>
63 template<
typename...>
138 template<
typename...>
160 template<
typenameTObj>
165 template<
typenameTObj>
176m_Index = index; m_FnFilter = fn; m_Extra = extra;
return*
this;
180m_Index = ns_ObjectIStreamFilterIterator::xxx_MemberIndex<TObj>(mem_name);
181m_FnFilter = fn; m_Extra = extra;
return*
this;
202 template<
typenameTObj>
205 constCParams<TObj>& params = CParams<TObj>()) =
delete;
335 template<
typename...>
341 template<
typenameTObj>
346 template<
typenameTR>
350: m_ThreadPolicy(launch::async)
351, m_MaxParserThreads (16)
352, m_MaxTotalRawSize (16 * 1024 * 1024)
353, m_MinRawBufferSize (128 * 1024)
354, m_SameThread(
false) {
359CParent::FilterByMember(index, fn, extra);
return*
this;
364CParent::FilterByMember(mem_name, fn, extra);
return*
this;
369m_ThreadPolicy = policy;
return*
this;
374m_MaxParserThreads = max_parser_threads;
return*
this;
379m_MaxTotalRawSize = max_total_raw_size;
return*
this;
384m_MinRawBufferSize = min_raw_buffer_size;
return*
this;
395m_SameThread = same_thread;
return*
this;
420 template<
typenameTObj>
423 constCParams<TObj>& params = CParams<TObj>()) =
delete;
475 template<
typenameTRoot>
514 voidx_BeginRead(
void);
515 voidx_EndRead(
void);
519 boolx_NextSeqWithFilter(
const CObjectInfo& objinfo);
520 boolx_NextChoiceWithFilter(
const CObjectInfo& objinfo);
521 boolx_NextContainerWithFilter(
const CObjectInfo& objinfo);
546 template<
typenameTR>
564 voidx_ReaderThread(
void);
571 template<
typenameTRoot,
typenameTChild>
593 voidx_ReaderThread(
void);
595 template<
typenameTR>
604m_This->x_AcceptData(
in,
type);
617 template<
typenameTRoot>
621 returnTRoot::GetTypeInfo();
624 template<
typenameTRoot>
632 template<
typenameTRoot>
635 TTypeInfotinfo = xxx_GetTypeInfo<TRoot>();
647 template<
typename...>
648 template<
typenameTObj>
651 TTypeInfotinfo = ns_ObjectIStreamFilterIterator::xxx_GetTypeInfo<TObj>();
665 template<
typenameTRoot>
670 template<
typenameTRoot>
673: m_Data( new CData(istr, deleteInStream, params,
677 template<
typenameTRoot>
682 if(m_Data->m_FilterType !=
CData::eNone&& !m_Data->m_EndOfData) {
683m_Data->m_HasReader =
true;
684m_Data->m_Reader = thread([
this](){x_ReaderThread();});
689 template<
typenameTRoot>
694 template<
typenameTRoot>
701 template<
typenameTRoot>
705 template<
typenameTRoot>
709: m_Istr(&istr), m_Own(deleteInStream)
710, m_ValueType(tinfo), m_Value(tinfo), m_HasReader(
false)
711, m_EndOfData(m_Istr->EndOfData()), m_Params(params)
715m_Params.m_FnFilter =
nullptr;
717m_FilterType =
eNone;
718 if(m_Params.m_FnFilter) {
728 if(m_FilterType ==
eNone) {
731m_FilterType = is_random ? eOneRandom : eOneSeq;
733m_FilterType = is_random ? eAllRandom : eAllSeq;
737m_FilterType = m_Params.m_Index !=
kInvalidMember? eOneChoice : eAllChoice;
739m_FilterType = m_Params.m_Index !=
kInvalidMember? eOneContainer : eAllContainer;
744 template<
typenameTRoot>
746 if(m_Reader.joinable()) {
748m_ReaderCv.notify_all();
756 template<
typenameTRoot>
759unique_lock<mutex> lck( m_ReaderMutex);
760 while(m_Value.GetObjectPtr() !=
nullptr) {
761m_ReaderCv.wait(lck);
765 template<
typenameTRoot>
770m_ReaderCv.notify_one();
773 template<
typenameTRoot>
776m_Data->x_BeginRead();
778m_Data->m_ValueType.SetLocalSkipHook(*(m_Data->m_Istr),
new typenameCData::template x_CObjectIStreamIteratorHook<TRoot>(m_Data.get()));
782 if(!m_Data->m_EndOfData) {
783m_Data->m_ReaderExpt = current_exception();
789 template<
typenameTRoot,
typenameTChild>
792this->m_Data->x_BeginRead();
794this->m_Data->m_ValueType.SetLocalSkipHook(*(this->m_Data->m_Istr),
new typenameCParent::CData::template x_CObjectIStreamIteratorHook<TChild>(this->m_Data.get()));
795this->m_Data->m_ValueType.SetLocalReadHook(*(this->m_Data->m_Istr),
newx_CObjectIStreamIteratorReadHook<TChild>(this->m_Data.get()));
799 if(!this->m_Data->m_EndOfData) {
800this->m_Data->m_ReaderExpt = current_exception();
803this->m_Data->x_EndRead();
806 template<
typenameTRoot>
811 if(m_Istr->EndOfData()) {
815 switch( m_FilterType) {
818res = x_NextNoFilter(objinfo);
824res = x_NextSeqWithFilter(objinfo);
828res = x_NextChoiceWithFilter(objinfo);
832res = x_NextContainerWithFilter(objinfo);
836unique_lock<mutex> lck(m_ReaderMutex);
838m_ReaderCv.notify_one();
839 while(m_Value.GetObjectPtr() !=
nullptr) {
842 "CObjectIStreamIterator: abort data parsing");
844m_ReaderCv.wait(lck);
847 in.SetDiscardCurrObject();
852 template<
typenameTRoot>
855unique_lock<mutex> lck(m_ReaderMutex);
857m_ReaderCv.notify_one();
858 while(m_Value.GetObjectPtr() ==
nullptr&& !m_EndOfData) {
859m_ReaderCv.wait(lck);
862rethrow_exception(m_ReaderExpt);
866 template<
typenameTRoot>
874 template<
typenameTRoot>
880 boolchecked =
false;
891 switch(m_FilterType) {
897 if(mi_now > m_Params.m_Index && !checked) {
898valid = m_Params.m_FnFilter( *m_Istr, obj, m_Params.m_Index,
nullptr, m_Params.m_Extra);
903 for(++mi; valid && mi < mi_now; ++mi) {
904valid = m_Params.m_FnFilter( *m_Istr, obj, mi,
nullptr, m_Params.m_Extra);
913 i.ReadClassMember(objinfo);
916 switch(m_FilterType) {
920 if(mi_now == m_Params.m_Index) {
923valid = m_Params.m_FnFilter( *m_Istr, obj, mi_now, &oi, m_Params.m_Extra);
928 done.insert(mi_now);
935valid = m_Params.m_FnFilter( *m_Istr, obj, mi_now, &oi, m_Params.m_Extra);
941 i.SkipClassMember();
948 switch(m_FilterType) {
953valid = m_Params.m_FnFilter( *m_Istr, obj, m_Params.m_Index,
nullptr, m_Params.m_Extra);
959 for(++mi; valid && mi < mi_last; ++mi) {
960valid = m_Params.m_FnFilter( *m_Istr, obj, mi,
nullptr, m_Params.m_Extra);
968 for(; valid && mi < mi_last; ++mi) {
969 if(
done.find(mi) ==
done.end()) {
970valid = m_Params.m_FnFilter( *m_Istr, obj, mi,
nullptr, m_Params.m_Extra);
980 template<
typenameTRoot>
989 if(
i== m_Params.m_Index) {
992valid = m_Params.m_FnFilter( *m_Istr, obj,
i, &oi, m_Params.m_Extra);
994valid = m_Params.m_FnFilter( *m_Istr, obj, m_Params.m_Index,
nullptr, m_Params.m_Extra);
999 template<
typenameTRoot>
1012 if(m_FilterType == eAllContainer || (m_FilterType == eOneContainer && mi == m_Params.m_Index)) {
1014valid = m_Params.m_FnFilter( *m_Istr, obj, mi, &oe, m_Params.m_Extra);
1024 template<
typenameTRoot>
1027 if(m_Data.get() !=
nullptr) {
1028 if(!m_Data->m_HasReader) {
1029 if(m_Data->m_Istr->EndOfData()) {
1032m_Data->m_Value =
CObjectInfo(m_Data->m_ValueType);
1033m_Data->m_Istr->Read(m_Data->m_Value);
1037 if(m_Data->m_EndOfData) {
1045 template<
typenameTRoot>
1049 returnm_Data.get() == v.m_Data.get();
1052 template<
typenameTRoot>
1056 returnm_Data.get() != v.m_Data.get();
1059 template<
typenameTRoot>
1061 returnm_Data.get() !=
nullptr&& m_Data->m_Value.GetObjectPtr() !=
nullptr;
1064 template<
typenameTRoot>
1067 return*(m_Data->m_Istr);
1070 template<
typenameTRoot>
1073 return*(TRoot*)(m_Data->m_Value.GetObjectPtr());
1076 template<
typenameTRoot>
1079 return IsValid() ? (TRoot*)m_Data->m_Value.GetObjectPtr() :
nullptr;
1082 template<
typenameTRoot>
1088 template<
typenameTRoot>
1098 template<
typenameTRoot,
typenameTChild>
1103 template<
typenameTRoot,
typenameTChild>
1106:
CParent(istr, params, deleteInStream)
1108 if(!this->m_Data->m_EndOfData) {
1109this->m_Data->m_HasReader =
true;
1110this->m_Data->m_Reader = thread([
this](){x_ReaderThread();});
1115 template<
typenameTRoot,
typenameTChild>
1120 template<
typenameTRoot,
typenameTChild>
1124CParent::operator=(v);
1128 template<
typenameTRoot,
typenameTChild>
1132 template<
typenameTRoot,
typenameTChild>
1135CParent::operator++();
1139 template<
typenameTRoot,
typenameTChild>
1145 template<
typenameTRoot,
typenameTChild>
1155 template<
typenameTRoot>
1180TRoot* operator->();
1188 #if NCBI_COMPILER_MSVC && _MSC_VER < 1900 1216 voidx_UpdateObjectsQueue();
1217 voidx_UpdateFuturesQueue();
1219 voidx_ReaderThread(
void);
1249 template<
typenameTRoot,
typenameTChild>
1287 template<
typenameTRoot>
1293 template<
typenameTRoot>
1302 template<
typenameTRoot>
1306: m_Data(new CData(istr, deleteInStream, parser, params))
1311 template<
typenameTRoot>
1318 template<
typenameTRoot>
1326 template<
typenameTRoot>
1330 template<
typenameTRoot>
1333 if(m_Data.get() !=
nullptr) {
1335m_Data->x_UpdateFuturesQueue();
1336m_Data->x_UpdateObjectsQueue();
1337}
while(!
IsValid() && !m_Data->m_EndOfData);
1345 template<
typenameTRoot>
1349 returnm_Data.get() == v.m_Data.get();
1352 template<
typenameTRoot>
1356 returnm_Data.get() != v.m_Data.get();
1359 template<
typenameTRoot>
1361 returnm_Data.get() !=
nullptr&& !m_Data->m_ObjectsQueue.empty();
1364 template<
typenameTRoot>
1367 returnm_Data->m_ObjectsQueue.front().GetObject();
1370 template<
typenameTRoot>
1373 return IsValid() ? m_Data->m_ObjectsQueue.front().GetPointer() :
nullptr;
1376 template<
typenameTRoot>
1382 template<
typenameTRoot>
1389 template<
typenameTRoot>
1412 if(params.m_FnFilter) {
1417 while(!istr->EndOfData()) {
1419istr->Read(&*
object, object->GetThisTypeInfo());
1420queue.push(
object);
1426 template<
typenameTRoot>
1431, m_Own(deleteInStream)
1433, m_ParserCount( params.m_MaxParserThreads != 0 ? params.m_MaxParserThreads : 16)
1434, m_RawBufferSize( params.m_MinRawBufferSize)
1435, m_MaxRawSize( params.m_SameThread ? 0 : params.m_MaxTotalRawSize)
1436, m_CurrentRawSize(0)
1437, m_Policy(params.m_ThreadPolicy)
1438, m_EndOfData(m_Istr->EndOfData())
1441 if(m_MaxRawSize != 0 && !m_EndOfData) {
1442m_Reader = thread([
this](){x_ReaderThread();});
1446 template<
typenameTRoot>
1448 if(m_Reader.joinable()) {
1449m_EndOfData =
true;
1450m_ReaderCv.notify_all();
1474 template<
typenameTRoot>
1479 if(!m_ObjectsQueue.empty()) {
1480m_GarbageQueue.push( m_ObjectsQueue.front());
1481m_ObjectsQueue.pop();
1485 if( m_ObjectsQueue.empty()
1486&& !m_FuturesQueue.empty())
1488m_ObjectsQueue = m_FuturesQueue.front().get();
1489m_FuturesQueue.pop();
1493 template<
typenameTRoot>
1498 if( m_FuturesQueue.size() >= m_ParserCount) {
1503(m_MaxRawSize != 0 && m_ReaderData.empty() && !m_FuturesQueue.empty())) {
1507 if(
data.IsNull()) {
1508m_EndOfData =
true;
1531 swap(m_GarbageQueue, tmp_garbage_queue);
1533m_FuturesQueue.push( async( m_Policy, m_Parser,
1534 data, m_Istr->GetDataFormat(), m_Params, std::move(tmp_garbage_queue)));
1537 template<
typenameTRoot>
1541 if(m_MaxRawSize == 0) {
1543 if(m_Istr->EndOfData()) {
1550m_Istr->SkipAnyContentObject();
1551}
while( !m_Istr->EndOfData() && m_Istr->GetStreamPos() < endpos);
1556unique_lock<mutex> lck(m_ReaderMutex);
1557 while(m_ReaderData.empty()) {
1558m_ReaderCv.wait(lck);
1562m_CurrentRawSize -= m_ReaderDataSize.front();
1563m_ReaderDataSize.pop();
1564m_ReaderCv.notify_one();
1568 template<
typenameTRoot>
1573 while(!m_Istr->EndOfData()) {
1581m_Istr->SkipAnyContentObject();
1582}
while( !m_Istr->EndOfData() && m_Istr->GetStreamPos() < endpos);
1586 size_tthis_buffer_size = m_Istr->GetStreamPos() - startpos;
1589unique_lock<mutex> lck(m_ReaderMutex);
1591 while(!m_EndOfData && m_CurrentRawSize >= m_MaxRawSize) {
1592m_ReaderCv.wait(lck);
1597m_ReaderData.push(
data);
1598m_ReaderDataSize.push( this_buffer_size);
1599m_CurrentRawSize += this_buffer_size;
1600m_ReaderCv.notify_one();
1604m_ReaderMutex.lock();
1605m_ReaderData.push(
data);
1606m_ReaderDataSize.push(0);
1607m_ReaderMutex.unlock();
1608m_ReaderCv.notify_one();
1615 template<
typenameTRoot,
typenameTChild>
1621 template<
typenameTRoot,
typenameTChild>
1625:
CParent(istr, deleteInStream,
1630 template<
typenameTRoot,
typenameTChild>
1637 template<
typenameTRoot,
typenameTChild>
1641CParent::operator=(v);
1645 template<
typenameTRoot,
typenameTChild>
1649 template<
typenameTRoot,
typenameTChild>
1652CParent::operator++();
1656 template<
typenameTRoot,
typenameTChild>
1662 template<
typenameTRoot,
typenameTChild>
1668 template<
typenameTRoot,
typenameTChild>
1708 template<
typenameTRoot,
typenameTObject>
1712 template<
typenameTRoot,
typenameTObject>
1720 virtual void Process(
constTObject& obj)
override;
1726 template<
typenameTRoot,
typenameTObject>
1744 "invalid data object received");
1796 template<
typenameTRoot,
typenameTObject>
1809 virtual void*
Main(
void)
override 1814Serial_FilterObjects< TRoot >( this->
m_In,
1826 template<
typenameTRoot,
typenameTObject>
1839 virtual void*
Main(
void)
override 1844Serial_FilterStdObjects< TRoot >( this->
m_In,
1855 template<
typenameTRoot,
typenameTObject>
1859m_Reader.SetObject(&obj);
1863 template<
typenameTRoot,
typenameTObject>
1885 return m_Reader->GetObject() != 0;
1921 template<
typenameTRoot,
typenameTObject>
1951 template<
typenameTRoot,
typenameTObject>
Reading (iterating through) members of the class (SET, SEQUENCE)
Reading (iterating through) elements of containers (SET OF, SEQUENCE OF).
Stream iterator for serial objects.
Stream iterator for standard type objects.
Asynchronous parsing parameters.
CObjectIStreamAsyncIterator<TRoot, TChild>
CObjectIStreamAsyncIterator<TRoot>
CObjectIStreamAsyncIterator.
CObjectIStreamIterator<TRoot, TChild>
template specializations and implementation
Read hook for a standalone object.
Root class for all serialization exceptions.
Helper hook for Serial_FilterObjects function template; User hook class should be derived from this b...
Skip hook for a standalone object.
Guard class for CObjectIStream::StartDelayBuffer/EndDelayBuffer.
CTypeInfo class contains all information about C++ types (both basic and classes): members and layout...
Include a standard set of the NCBI C++ Toolkit most basic headers.
bool operator==(const CEquivRange &A, const CEquivRange &B)
void swap(NCBI_NS_NCBI::pair_base_member< T1, T2 > &pair1, NCBI_NS_NCBI::pair_base_member< T1, T2 > &pair2)
@ eTakeOwnership
An object can take ownership of another.
@ eNoOwnership
No ownership is assumed.
#define NCBI_THROW(exception_class, err_code, message)
Generic macro to throw an exception, given the exception class, error code and message string.
#define NCBI_REPORT_EXCEPTION(title, ex)
Generate a report on the exception.
TMemberIndex Find(const CTempString &name) const
const CItemInfo * GetItemInfo(TMemberIndex index) const
static TMemberIndex FirstIndex(void)
TTypeInfo GetTypeInfo(void) const
TMemberIndex LastIndex(void) const
CVect2< NCBI_PROMOTE(int,U) > operator*(int v1, const CVect2< U > &v2)
size_t TMemberIndex
Type used for indexing class members and choice variants.
const TMemberIndex kInvalidMember
Special value returned from FindMember.
static const TObjectType * SafeCast(TTypeInfo type)
ESerialDataFormat
Data file format.
bool IsValid(void) const
Check whether the iterator points to a data TRUE if the iterator is constructed upon a serialization ...
queue< size_t > m_ReaderDataSize
CRef< CByteSource > EndDelayBuffer(void)
Redirect call to protected CObjectIStream After this call guarding is finished.
CObjectIStreamIterator(CObjectIStream &istr, EOwnership deleteInStream=eNoOwnership, const CParams< TObj > ¶ms=CParams< TObj >())=delete
Construct iterator upon an object serialization stream.
~CIStreamIteratorThread_Base(void)
CObjectIStreamIterator & begin(void)
Return self.
CObjectIStreamAsyncIterator<>::CParams< TChild > CParams
~CIStreamStdIterator(void)
CParams & FilterByMember(const string &mem_name, FMemberFilter< TObj > fn, void *extra=nullptr)
Filter by member name.
TObjectsQueue m_GarbageQueue
friend class CObjectIStreamIterator
shared_ptr< CData > m_Data
condition_variable m_ReaderCv
shared_ptr< CData > m_Data
CIStreamIteratorThread_Base< TRoot, TObject > & m_Reader
unsigned m_MaxParserThreads
x_CObjectIStreamIteratorReadHook(typename CObjectIStreamIterator< TR >::CData *pthis)
CObjectInfo GetPointedObject(void) const
Get data and type information of object to which this type refers.
CObjectIStreamIterator & operator=(const CObjectIStreamIterator &)
bool IsValid(void) const
Check whether the iterator points to a data TRUE if the iterator is constructed upon a serialization ...
~CObjectIStreamAsyncIterator()
void SetObject(const TObject *obj)
CParams & ReadAndSkipInTheSameThread(bool same_thread)
Raw data read and its pre-parsing (storing the raw data pertaining to a single object and putting it ...
function< bool(const CObjectIStream &istr, TObj &obj, TMemberIndex mem_index, CObjectInfo *mem, void *extra)> FMemberFilter
Object member filtering function.
~CObjectIStreamIterator()
const TObject * operator->(void) const
CIStreamStdIteratorThread(CObjectIStream &in, EOwnership deleteInStream)
typename CParent::TObjectsQueue TObjectsQueue
queue< future_queue_t > futures_queue_t
bool operator!=(const CObjectIStreamIterator &) const
static CObjectIStream * Create(ESerialDataFormat format)
Create serial object reader.
CParams & MinRawBufferSize(size_t min_raw_buffer_size)
Single raw data memory buffer size should be at least this big.
virtual bool EndOfData(void)
Check if there is still some meaningful data that can be read; in text streams this function will ski...
CObjectIStreamIterator & operator++(void)
Advance to the next data object.
CObjectIStreamIterator<>::CParams< TRoot > CParams
CIStreamIterator_Base(const CIStreamIterator_Base< TRoot, TObject > &v)
const CObjectIStream & GetObjectIStream(void) const
Return the underlying serial object stream.
CObjectIStreamIterator(const CObjectIStreamIterator &)
queue< CRef< TRoot > > TObjectsQueue
CObjectIStreamAsyncIterator(const CObjectIStreamAsyncIterator &)
input_iterator_tag iterator_category
function< TObjectsQueue(CRef< CByteSource >, ESerialDataFormat, const CParams &, TObjectsQueue &&)> FParserFunction
TObjectPtr GetObjectPtr(void) const
Get pointer to object.
bool operator==(const CObjectIStreamIterator &) const
CObjectIStreamAsyncIterator & operator++(void)
Advance to the next data object.
CObjectInfo GetMember(void) const
Get class member data.
CObjectIStreamIterator<>::FMemberFilter< TR > FMemberFilter
ptrdiff_t difference_type
TObjectsQueue m_ObjectsQueue
TObj * operator->()
Return pointer to data object which is currently pointed to by the iterator.
x_CObjectIStreamIteratorHook(typename CObjectIStreamIterator< TR >::CData *pthis)
CObjectIStreamIterator<>::CParams< TObj > CParent
CIStreamObjectIterator(CObjectIStream &in, EOwnership deleteInStream=eNoOwnership)
CChoiceVariant GetCurrentChoiceVariant(void) const
Get data and type information of selected choice variant.
CIStreamIteratorThread_Base< TRoot, TObject > * m_Reader
virtual void ReadObject(CObjectIStream &in, const CObjectInfo &type) override
This method will be called at approriate time when the object of requested type is to be read.
input_iterator_tag iterator_category
~CIStreamObjectIteratorThread(void)
exception_ptr m_ReaderExpt
TTypeInfo GetTypeInfo(void) const
virtual void * Main(void) override
Derived (user-created) class must provide a real thread function.
TObj & operator*()
Return data object which is currently pointed to by the iterator.
CObjectIStreamIterator<>::CParams< TChild > CParams
CObjectIStreamAsyncIterator<>::CParams< TRoot > CParams
CParams & FilterByMember(const string &mem_name, FMemberFilter< TObj > fn, void *extra=nullptr)
Filter by member name.
~CIStreamStdIteratorThread(void)
CIStreamObjectHook(CIStreamIteratorThread_Base< TRoot, TObject > &thr)
CObjectIStreamIterator end(void)
Construct and return end-of-stream iterator.
const CClassTypeInfo * GetClassTypeInfo(void) const
CIStreamStdIterator(CObjectIStream &in, EOwnership deleteInStream=eNoOwnership)
CObjectInfo GetVariant(void) const
Get variant data.
virtual void Process(const TObject &obj) override
This method will be called when the object of the requested class is read.
CObjectIStreamIterator< TR >::CData * m_This
CIStreamObjectIteratorThread(CObjectIStream &in, EOwnership deleteInStream)
TMemberIndex xxx_MemberIndex(const string &mem_name)
bool operator!=(const CObjectIStreamAsyncIterator &) const
virtual void * Main(void)
Derived (user-created) class must provide a real thread function.
virtual void SkipObject(CObjectIStream &in, const CObjectTypeInfo &type) override
CParams & FilterByMember(TMemberIndex index, FMemberFilter< TObj > fn, void *extra=nullptr)
Filter by member index.
FMemberFilter< TObj > m_FnFilter
friend class CObjectIStreamAsyncIterator
TMemberIndex GetVariantIndex(void) const
Get index of the variant in the choice.
futures_queue_t m_FuturesQueue
CParams & MaxTotalRawSize(size_t max_total_raw_size)
Total size of raw data buffers is allowed to grow to this value.
~CIStreamObjectIterator(void)
ptrdiff_t difference_type
bool operator==(const CObjectIStreamAsyncIterator &) const
const TObject * GetObject(void) const
ETypeFamily GetTypeFamily(void) const
Get data type family.
size_t m_MinRawBufferSize
CObjectIStreamAsyncIterator & operator=(const CObjectIStreamAsyncIterator &)
CObjectIStreamIterator(void)=delete
Construct end-of-stream (invalid) iterator.
CIStreamIterator_Base< TRoot, TObject > & operator=(const CIStreamIterator_Base< TRoot, TObject > &v)
enable_if< is_base_of< CSerialObject, TRoot >::value, TTypeInfo >::type xxx_GetTypeInfo(void)
const TObject & operator*(void) const
~CIStreamIterator_Base(void)
TObj & operator*()
Return data object which is currently pointed to by the iterator.
CParams & LaunchPolicy(launch policy)
Parsing thread launch policy.
CParams & FilterByMember(TMemberIndex index, FMemberFilter< TObj > fn, void *extra=nullptr)
Filter by member index.
CObjectIStreamAsyncIterator & begin(void)
Return self.
CIStreamIteratorThread_Base(CObjectIStream &in, EOwnership deleteInStream)
CObjectIStreamAsyncIterator end(void)
Construct and return end-of-stream iterator.
future< TObjectsQueue > future_queue_t
queue< CRef< CByteSource > > m_ReaderData
TObj * operator->()
Return pointer to data object which is currently pointed to by the iterator.
virtual void * Main(void) override
Derived (user-created) class must provide a real thread function.
bool Serial_FilterSkip(CObjectIStream &in, const CObjectTypeInfo &ctype)
CObjectTypeInfo m_ValueType
CObjectIStreamAsyncIterator(void)=delete
Construct end-of-stream (invalid) iterator.
CObjectIStreamAsyncIterator(CObjectIStream &istr, EOwnership own_istr=eNoOwnership, const CParams< TObj > ¶ms=CParams< TObj >())=delete
Construct iterator upon an object serialization stream.
condition_variable m_ReaderCv
CObjectIStreamIterator< TR >::CData * m_This
CParams & MaxParserThreads(unsigned max_parser_threads)
Maximum number of parsing threads.
bool IsValid(const CSeq_point &pt, CScope *scope)
Checks that point >= 0 and point < length of Bioseq.
#define END_NCBI_SCOPE
End previously defined NCBI scope.
#define BEGIN_NCBI_SCOPE
Define ncbi namespace.
bool operator!=(const CNCBI_IPAddr &lhs, unsigned int rhs)
IO_PREFIX::streampos CNcbiStreampos
Portable alias for streampos.
static void Exit(void *exit_data)
Cancel current thread.
void Wait(void)
Wait on semaphore.
void Post(unsigned int count=1)
Increment the semaphore by "count".
void Join(void **exit_data=0)
Wait for the thread termination.
const CItemsInfo & GetItems(void) const
ETypeFamily GetTypeFamily(void) const
bool RandomOrder(void) const
void DefaultReadData(CObjectIStream &in, TObjectPtr object) const
bool Implicit(void) const
enum ENcbiOwnership EOwnership
Ownership relations between objects.
The blob sat and sat key Both must be positive integers</td > n< td > Non empty string The interpretation of the blob id depends on a processor Cassandra n processor expects the following format
enable_if<(is_trivial< TRoot >::value &&is_standard_layout< TRoot >::value)||is_convertible< TRoot, std::string >::value, TTypeInfo >::type xxx_GetTypeInfo(void)
const GenericPointer< typename T::ValueType > T2 value
#define NCBI_COMPILER_MSVC
Multi-threading â classes, functions, and features.
std::istream & in(std::istream &in_, double &x_)
CRef< CTestThread > thr[k_NumThreadsMax]
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