72 const void* nonCObject,
73 TTypeCreate createFunc,
75 TWhichFunction whichFunc,
76 TSelectFunction selectFunc,
77 TResetFunction resetFunc)
79 m_WhichFunction(whichFunc),
80 m_ResetFunction(resetFunc), m_SelectFunction(selectFunc)
87 TTypeCreate createFunc,
89 TWhichFunction whichFunc,
90 TSelectFunction selectFunc,
91 TResetFunction resetFunc)
93 m_WhichFunction(whichFunc),
94 m_ResetFunction(resetFunc), m_SelectFunction(selectFunc)
100 const void* nonCObject,
101 TTypeCreate createFunc,
103 TWhichFunction whichFunc,
104 TSelectFunction selectFunc,
105 TResetFunction resetFunc)
107 m_WhichFunction(whichFunc),
108 m_ResetFunction(resetFunc), m_SelectFunction(selectFunc)
115 TTypeCreate createFunc,
117 TWhichFunction whichFunc,
118 TSelectFunction selectFunc,
119 TResetFunction resetFunc)
121 m_WhichFunction(whichFunc),
122 m_ResetFunction(resetFunc), m_SelectFunction(selectFunc)
153 const void* memberPtr,
164 const void* memberPtr,
204 if ( !op1->UserOp_Equals(*op2) )
247 opdst->UserOp_Assign(*opsrc);
305 index <= choiceType->GetVariants().LastIndex());
308 choiceType->
GetData(src, index), how);
378 in.BeginChoice(choiceType);
382 if (choiceType->
MayBeEmpty() ||
in.CanSkipUnknownVariants()) {
383 in.SkipAnyContentVariant();
385 in.ThrowError(
in.fFormatError,
"choice variant id expected");
395 in.EndChoiceVariant();
396 index =
in.BeginChoiceVariant(choiceType);
398 if (
in.CanSkipUnknownVariants()) {
399 in.SkipAnyContentVariant();
402 in.ThrowError(
in.fFormatError,
"choice variant id expected");
407 in.SetTopMemberId(variantInfo->
GetId());
410 in.EndChoiceVariant();
425 in.ReadChoiceSimple(choiceType, objectPtr);
436 out.BeginChoice(choiceType);
446 index = choiceType->
GetIndex(objectPtr);
449 out.ThrowError(
out.fInvalidData,
"cannot write empty choice");
454 out.BeginChoiceVariant(choiceType, variantInfo->
GetId());
458 out.EndChoiceVariant();
478 in.BeginChoice(choiceType);
482 if (choiceType->
MayBeEmpty() ||
in.CanSkipUnknownVariants()) {
483 in.SkipAnyContentVariant();
485 in.ThrowError(
in.fFormatError,
"choice variant id expected");
495 in.EndChoiceVariant();
496 index =
in.BeginChoiceVariant(choiceType);
498 if (
in.CanSkipUnknownVariants()) {
499 in.SkipAnyContentVariant();
502 in.ThrowError(
in.fFormatError,
"choice variant id expected");
507 in.SetTopMemberId(variantInfo->
GetId());
510 in.EndChoiceVariant();
526 in.SkipChoiceSimple(choiceType);
534 if ( variants ==
"*" ) {
541 vector<CTempString> tokens;
543 ITERATE ( vector<CTempString>, it, tokens ) {
static TObjectPtr GetMember(const CMemberInfo *memberInfo, TObjectPtr object)
CChoiceTypeInfoFunctions TFunc
static void ReadChoiceSimple(CObjectIStream &in, TTypeInfo objectType, TObjectPtr objectPtr)
static void AssignSimple(TTypeInfo typeInfo, TObjectPtr dst, TConstObjectPtr src, ESerialRecursionMode how)
static void SkipChoiceSimple(CObjectIStream &in, TTypeInfo objectType)
static void ReadChoiceDefault(CObjectIStream &in, TTypeInfo objectType, TObjectPtr objectPtr)
static void WriteChoiceDefault(CObjectOStream &out, TTypeInfo objectType, TConstObjectPtr objectPtr)
static void SkipChoiceDefault(CObjectIStream &in, TTypeInfo objectType)
static void AssignDefault(TTypeInfo typeInfo, TObjectPtr dst, TConstObjectPtr src, ESerialRecursionMode how)
static void CopyChoiceDefault(CObjectStreamCopier &copier, TTypeInfo objectType)
Read hook for a choice variant (CHOICE)
Base class for user-defined serializable classes to allow for objects assignment and comparison.
CTempString implements a light-weight string on top of a storage buffer whose lifetime management is ...
CTypeInfo class contains all information about C++ types (both basic and classes): members and layout...
std::ofstream out("events_result.xml")
main entry point for tests
static void * Add(void *object, ssize_t offset)
add offset to object reference (to get object's member)
#define ITERATE(Type, Var, Cont)
ITERATE macro to sequence through container elements.
static const CItemInfo * FindNextMandatory(const CItemInfo *info)
const CMemberId & GetId(void) const
bool IsAttlist(void) const
void WriteVariant(CObjectOStream &out, TConstObjectPtr choicePtr) const
void WriteMember(CObjectOStream &out, TConstObjectPtr classPtr) const
TObjectPtr GetItemPtr(TObjectPtr object) const
void SkipMember(CObjectIStream &in) const
void ReadVariant(CObjectIStream &in, TObjectPtr choicePtr) const
TConstObjectPtr GetVariantPtr(TConstObjectPtr choicePtr) const
CDelayBuffer & GetDelayBuffer(TObjectPtr object) const
const CItemInfo * GetItemInfo(TMemberIndex index) const
static TMemberIndex FirstIndex(void)
void SkipVariant(CObjectIStream &in) const
bool CanBeDelayed(void) const
bool HaveNoPrefix(void) const
TTypeInfo GetTypeInfo(void) const
void AddItem(CItemInfo *item)
void ReadMember(CObjectIStream &in, TObjectPtr classPtr) const
ESerialRecursionMode
How to assign and compare child sub-objects of serial objects.
const TMemberIndex kEmptyChoice
Special value for marking empty choice.
size_t TMemberIndex
Type used for indexing class members and choice variants.
const TMemberIndex kFirstMemberIndex
Start if member indexing.
const TMemberIndex kInvalidMember
Special value returned from FindMember.
const void * TConstObjectPtr
ssize_t TPointerOffsetType
static const TObjectType * SafeCast(TTypeInfo type)
void Update(void)
Parse stored data.
void CopyChoice(const CChoiceTypeInfo *choiceType)
#define BEGIN_OBJECT_FRAME_OF(Stream, Type)
#define BEGIN_OBJECT_FRAME_OF2(Stream, Type, Arg)
#define BEGIN_OBJECT_FRAME_OF3(Stream, Type, Arg1, Arg2)
#define END_OBJECT_FRAME_OF(Stream)
#define END_NCBI_SCOPE
End previously defined NCBI scope.
#define BEGIN_NCBI_SCOPE
Define ncbi namespace.
static list< string > & Split(const CTempString str, const CTempString delim, list< string > &arr, TSplitFlags flags=0, vector< SIZE_TYPE > *token_pos=NULL)
Split a string using specified delimiters.
void SetWriteFunction(TTypeWriteFunction func)
TPointerOffsetType m_WhichOffset
void SetSelectDelay(TSelectDelayFunction func)
virtual bool Equals(TConstObjectPtr obj1, TConstObjectPtr obj2, ESerialRecursionMode how=eRecursive) const override
Check if both objects contain the same values.
TConstObjectPtr GetData(TConstObjectPtr object, TMemberIndex index) const
const CItemsInfo & GetItems(void) const
void CallUserOp_Assign(TObjectPtr dst, TConstObjectPtr src) const
void AdjustChoiceTypeInfoFunctions(void)
const CSerialUserOp * AsCSerialUserOp(TConstObjectPtr obj) const
void InitChoiceTypeInfoFunctions(void)
const CItemsInfo & GetVariants(void) const
bool MayBeEmpty(void) const
TMemberIndex GetIndex(TConstObjectPtr object) const
bool IsCObject(void) const
Check is this TypeInfo object is kind of CClassTypeInfoBase.
virtual bool IsDefault(TConstObjectPtr object) const override
Check, whether the object contains default value.
const CVariantInfo * GetVariantInfo(TMemberIndex index) const
virtual void Assign(TObjectPtr dst, TConstObjectPtr src, ESerialRecursionMode how=eRecursive) const =0
Set object to copy of another one.
virtual void Assign(TObjectPtr dst, TConstObjectPtr src, ESerialRecursionMode how=eRecursive) const override
Set object to copy of another one.
void SetSkipFunction(TTypeSkipFunction func)
void SetGlobalReadHook(CReadObjectHook *hook)
Set global (for all input streams) read hook.
void SetDelayIndex(TObjectPtr object, TMemberIndex index) const
TMemberIndex Which(const void *object) const
void SetSelectorInfo(const void *offset, size_t sz)
virtual void SetDefault(TObjectPtr dst) const override
Set object to default value.
virtual bool Equals(TConstObjectPtr object1, TConstObjectPtr object2, ESerialRecursionMode how=eRecursive) const =0
Check if both objects contain the same values.
void SetGlobalHook(const CTempString &variant_names, CReadChoiceVariantHook *hook)
TSelectDelayFunction m_SelectDelayFunction
CChoiceTypeInfo(size_t size, const char *name, const void *nonCObject, TTypeCreate createFunc, const type_info &ti, TWhichFunction whichFunc, TSelectFunction selectFunc, TResetFunction resetFunc)
void SetCopyFunction(TTypeCopyFunction func)
CVariantInfo * AddVariant(const char *variantId, const void *variantPtr, const CTypeRef &variantType)
void ResetIndex(TObjectPtr object) const
void SetIndex(TObjectPtr object, TMemberIndex index, CObjectMemoryPool *pool=0) const
void SetReadFunction(TTypeReadFunction func)
const struct ncbi::grid::netcache::search::fields::SIZE size
std::istream & in(std::istream &in_, double &x_)