65 #if defined(NCBI_OS_MSWIN)
72 #define _TRACE(arg) ((void)0)
74 #define NCBI_USE_ERRCODE_X Serial_OStream
85 const string& fileName,
94 #if defined(NCBI_OS_MSWIN)
113 "CObjectOStream::Open: unsupported format");
144 "CObjectOStream::Open: unsupported format");
174 "CObjectOStream::Open: unsupported format");
202 TSerialVerifyData::ResetThreadDefault();
207 "CObjectOStream::SetVerifyDataThread: data verification disabled");
209 TSerialVerifyData::SetThreadDefault(
verify);
221 TSerialVerifyData::ResetDefault();
226 "CObjectOStream::SetVerifyDataGlobal: data verification disabled");
228 TSerialVerifyData::SetDefault(
verify);
237 now = TSerialVerifyData::GetDefault();
284 return s_SerialFixChars->
Get();
301 : m_Output(
out, edeleteOut ==
eTakeOwnership), m_Fail(fNoError), m_Flags(fFlagNone),
304 m_ParseDelayBuffers(eDelayBufferPolicyNotSet),
305 m_SpecialCaseWrite(eWriteAsNormal),
306 m_AutoSeparator(
false),
307 m_WriteNamedIntegersByValue(
false),
309 m_EnforceWritingDefaults(
false),
311 m_NonPrintSubst(
'#'),
312 m_FixMethod(x_GetFixCharsMethodDefault()),
313 m_VerifyData(x_GetVerifyDataDefault())
323 NCBI_CATCH_X(4,
"Cannot close serializing output stream")
378 if ( !old &&
flags ) {
418 Unended(
"internal error: unended object stack frame");
533 msg =
"cannot write unassigned member "+message;
568 WriteObject(
object.GetObjectPtr(),
object.GetTypeInfo());
588 const CVariantInfo* variantInfo =
object.GetVariantInfo();
661 _TRACE(
"CObjectOStream::WriteExternalObject(" <<
663 << typeInfo->
GetName() <<
')');
689 <<declaredTypeInfo->
GetName()<<
")");
690 if ( objectPtr == 0 ) {
705 if ( declaredTypeInfo == realTypeInfo ) {
711 ": new "<<realTypeInfo->
GetName());
726 #if SIZEOF_LONG_DOUBLE != 0
727 void CObjectOStream::WriteLDouble(
long double data)
750 #ifndef VIRTUAL_MID_LEVEL_IO
755 #ifndef VIRTUAL_MID_LEVEL_IO
765 #ifndef VIRTUAL_MID_LEVEL_IO
829 "NULL element while writing container "+
1020 for ( ; pos.
Valid(); ++pos ) {
1053 "choice variant id expected");
1074 "choice variant id expected");
1142 GetStream().Unended(
"byte block not fully written");
1163 GetStream().EndChars(*
this);
1172 GetStream().Unended(
"char block not fully written");
1197 if (
flags & ~accepted) {
1199 "CObjectOStream::SetFormattingFlags: ignoring unknown formatting flags");
1207 #ifdef NCBI_STRICT_GI
Incapsulate compile time information such as __FILE__, __LINE__, NCBI_MODULE, current function.
T & Get(void)
Create the variable if not created yet, return the reference.
Root class for all serialization exceptions.
CTypeInfo class contains all information about C++ types (both basic and classes): members and layout...
Thrown on an attempt to write unassigned data member.
Write hook for a choice variant (CHOICE)
Write hook for data member of a containing object (eg, SEQUENCE)
Write hook for a standalone object.
Interface for testing cancellation request in a long lasting operation.
Include a standard set of the NCBI C++ Toolkit most basic headers.
std::ofstream out("events_result.xml")
main entry point for tests
static const char * str(char *buf, int n)
@ eTakeOwnership
An object can take ownership of another.
@ eNoOwnership
No ownership is assumed.
#define ERR_POST_X_ONCE(err_subcode, message)
Error posting only once during program execution with default error code and given error subcode.
#define ERR_POST_X(err_subcode, message)
Error posting with default error code and given error subcode.
#define NCBI_ERRCODE_X
Returns currently set default error code.
@ eDiag_Trace
Trace message.
#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_CATCH_X(err_subcode, message)
Catch CExceptions as well with default error code and given error subcode placed in diagnostics.
void Warning(CExceptionArgs_Base &args)
const CMemberId & GetId(void) const
bool IsAttlist(void) const
void DefaultWriteVariant(CObjectOStream &out, TConstObjectPtr choicePtr) const
void WriteMember(CObjectOStream &out, TConstObjectPtr classPtr) const
TObjectPtr GetMemberPtr(TObjectPtr classPtr) const
void CopyMissingMember(CObjectStreamCopier &copier) const
void SetPathWriteHook(CObjectOStream *out, const string &path, CWriteClassMemberHook *hook)
void CopyVariant(CObjectStreamCopier &copier) const
void CopyMember(CObjectStreamCopier &copier) const
const CItemInfo * GetItemInfo(TMemberIndex index) const
void SetIndex(TMemberIndex index)
TTypeInfo GetTypeInfo(void) const
void SetPathWriteHook(CObjectOStream *out, const string &path, CWriteChoiceVariantHook *hook)
TMemberIndex LastIndex(void) const
EFixNonPrint
How to process non-printing character in the ASN VisibleString.
size_t TMemberIndex
Type used for indexing class members and choice variants.
const TMemberIndex kInvalidMember
Special value returned from FindMember.
ESerialVerifyData
Data verification parameters.
const void * TConstObjectPtr
#define SERIAL_VERIFY_DATA_WRITE
#define XSERIAL_TYPEINFO_WRITELOCK
unsigned int TSerial_Format_Flags
MSerial_Format –.
ESerialDataFormat
Data file format.
@ fSerial_AsnText_NoEol
do not write end-of-line symbol
@ fSerial_AsnText_NoIndentation
do not use indentation
@ eSerial_StdWhenStd
use std when filename is "stdin"/"stdout"
@ eSerial_StdWhenDash
use std stream when filename is "-"
@ eSerial_StdWhenEmpty
use std stream when filename is empty
@ eFNP_Allow
pass through unchanged, post no error message
@ eFNP_Skip
skip, post no error message
@ eFNP_Throw
replace with '#', throw an exception
@ eFNP_Abort
replace with '#', post an error of severity FATAL
@ eFNP_ReplaceAndWarn
replace with '#', post an error of severity ERROR
@ eFNP_Replace
replace with '#' silently
@ eSerialVerifyData_Never
never verify (even if set to verify later on)
@ eSerialVerifyData_DefValueAlways
initialize field with default
@ eSerialVerifyData_DefValue
initialize field with default
@ eSerialVerifyData_Yes
do verify
@ eSerialVerifyData_Always
always verify (even if set not to later on)
@ eSerialVerifyData_No
do not verify
@ eSerialVerifyData_Default
use current default
@ eSerial_AsnText
ASN.1 text.
@ eSerial_AsnBinary
ASN.1 binary.
static CTypeInfo * FindType(const CObjectStack &stk)
CNcbiStreampos GetStreamOffset(void) const
virtual void EndClassMember(void)
virtual string GetStackTrace(void) const override
Get current stack trace as string.
MLIOVIR void WriteClassMemberSpecialCase(const CMemberId &memberId, TTypeInfo memberType, TConstObjectPtr memberPtr, ESpecialCaseWrite how)
void RegisterObject(TTypeInfo typeInfo)
TFailFlags SetFailFlagsNoError(TFailFlags flags)
Set fail flags, but do not ERR_POST any messages.
virtual void EndClassMember(void)
virtual void BeginClass(const CClassTypeInfo *classInfo)=0
void WriteClassMember(const CConstObjectInfoMI &member)
virtual void CopyGi(CObjectIStream &in)
EFixNonPrint x_FixCharsMethod(void) const
CStreamPathHook< CVariantInfo *, CWriteChoiceVariantHook * > m_PathWriteVariantHooks
virtual void EndBytes(const ByteBlock &block)
virtual void WriteThis(TConstObjectPtr object, TTypeInfo typeInfo)
virtual void x_SetPathHooks(bool set) override
virtual void WriteFileHeader(TTypeInfo type)
virtual void BeginChoice(const CChoiceTypeInfo *choiceType)
void SetHook(const string &path, THook hook)
TObjectIndex GetObjectCount(void) const
#define END_OBJECT_2FRAMES_OF(Stream)
virtual void BeginBytes(const ByteBlock &block)
CStreamObjectPathHook< CWriteObjectHook * > m_PathWriteObjectHooks
virtual void EndContainerElement(void)
bool fail(void) const
Check if any of fail flags is set.
virtual void WriteOther(TConstObjectPtr object, TTypeInfo typeInfo)
virtual void EndChars(const CharBlock &block)
virtual void WriteInt8(Int8 data)=0
virtual void EndClass(void)
void WriteExternalObject(TConstObjectPtr object, TTypeInfo typeInfo)
void CopyObject(TTypeInfo objectType, CObjectStreamCopier &copier)
void SetUseEol(bool set)
Set up end-of-line symbol usage in text streams.
virtual void WriteSeparator(void)
static CObjectOStream * OpenObjectOStreamAsn(CNcbiOstream &out, EOwnership deleteOut)
bool GetAutoSeparator(void)
Get separator auto-output paramater.
#define ThrowError(flag, mess)
virtual void EndContainer(void)=0
static void SetVerifyDataThread(ESerialVerifyData verify)
Set up default output data verification for streams created by the current thread.
void ResetPathHooks(void)
AutoPtr< CWriteObjectList > m_Objects
void SetDelayBufferParsingPolicy(EDelayBufferParsing policy)
void Unended(const string &msg)
virtual void WriteNullPointer(void)=0
virtual void EndContainerElement(void)
virtual TMemberIndex BeginClassMember(const CClassTypeInfo *classType)=0
void SetPathWriteObjectHook(const string &path, CWriteObjectHook *hook)
friend CObjectOStream & Separator(CObjectOStream &os)
CLocalHookSet< CWriteObjectHook > m_ObjectHookKey
const CMemberInfo * GetMemberInfo(void) const
#define BEGIN_OBJECT_FRAME2(Type, Arg)
static CObjectOStream * OpenObjectOStreamAsnBinary(CNcbiOstream &out, EOwnership deleteOut)
CStreamPathHook< CMemberInfo *, CWriteClassMemberHook * > m_PathWriteMemberHooks
const string & GetStackPath(void) const
MLIOVIR void WriteContainer(const CContainerTypeInfo *containerType, TConstObjectPtr containerPtr)
virtual void BeginNamedType(TTypeInfo namedTypeInfo)
TFlags GetFlags(void) const
EDelayBufferParsing m_ParseDelayBuffers
static CObjectOStream * Open(ESerialDataFormat format, CNcbiOstream &outStream, bool deleteOutStream)
Create serial object writer and attach it to an output stream.
virtual void BeginNamedType(TTypeInfo namedTypeInfo)
void SetPathHooks(CObjectStack &stk, bool set)
CObjectOStream & GetStream(void) const
TFrame & FetchFrameFromTop(size_t index)
virtual void BeginContainer(const CContainerTypeInfo *containerType)=0
virtual ~CObjectOStream(void)
Destructor.
virtual void EndNamedType(void)
virtual TMemberIndex BeginChoiceVariant(const CChoiceTypeInfo *choiceType)=0
void WriteObject(const CConstObjectInfo &object)
const CConstObjectInfo & GetClassObject(void) const
Get containing class data.
string GetStackTraceASN(void) const
virtual void WriteOtherEnd(TTypeInfo typeInfo)
void ThrowError1(const CDiagCompileInfo &diag_info, TFailFlags fail, const char *message, CException *exc=0)
#define BEGIN_OBJECT_2FRAMES_OF(Stream, Type)
void Write(const CConstObjectInfo &object)
virtual void BeginContainer(const CContainerTypeInfo *containerType)=0
TTypeInfo GetTypeInfo(void) const
virtual void SkipAnyContentVariant(void)
#define END_OBJECT_FRAME()
#define BEGIN_OBJECT_FRAME_OF2(Stream, Type, Arg)
size_t GetStackDepth(void) const
EFixNonPrint x_GetFixCharsMethodDefault(void) const
CLocalHookSet< CWriteChoiceVariantHook > m_ChoiceVariantHookKey
void WriteContainerElement(const CConstObjectInfo &element)
CObjectIStream & In(void) const
virtual void WriteObjectReference(TObjectIndex index)=0
bool InGoodState(void)
Check fail flags and also the state of output stream.
void SetUseIndentation(bool set)
Set up indentation usage in text streams.
ESerialDataFormat GetDataFormat(void) const
Get data format.
virtual void BeginChoiceVariant(const CChoiceTypeInfo *choiceType, const CMemberId &id)=0
CNcbiStreampos GetStreamPos(void) const
Get the current stream position.
virtual string GetPosition(void) const override
Get current stream position as string.
static CObjectOStream * OpenObjectOStreamJson(CNcbiOstream &out, EOwnership deleteOut)
MLIOVIR void CopyNamedType(TTypeInfo namedTypeInfo, TTypeInfo typeInfo, CObjectStreamCopier &copier)
virtual void EndOfWrite(void)
MLIOVIR void WriteClass(const CClassTypeInfo *objectType, TConstObjectPtr objectPtr)
void ForgetObjects(TObjectIndex from, TObjectIndex to)
CObjectOStream & Out(void) const
THook GetHook(CObjectStack &stk) const
void SetHook(const string &path, THook hook)
void SetTopMemberId(const CMemberId &memberId)
static void SetVerifyDataGlobal(ESerialVerifyData verify)
Set up default output data verification for streams created by the current process.
MLIOVIR void CopyClassRandom(const CClassTypeInfo *objectType, CObjectStreamCopier &copier)
CLocalHookSet< CWriteClassMemberHook > m_ClassMemberHookKey
#define BEGIN_OBJECT_2FRAMES_OF2(Stream, Type, Arg)
MLIOVIR void CopyAlias(const CAliasTypeInfo *AliasType, CObjectStreamCopier &copier)
void SetCanceledCallback(const ICanceled *callback)
Set cancellation check callback.
void RegisterObject(TTypeInfo typeInfo)
virtual bool BeginContainerElement(TTypeInfo elementType)=0
virtual void ResetState(void)
void WatchPathHooks(bool set=true)
bool ShouldParseDelayBuffer(void) const
void SetPathWriteMemberHook(const string &path, CWriteClassMemberHook *hook)
virtual void WriteFloat(float data)
virtual void EndChoice(void)
void HandleEOF(CEofException &)
static TInfo FindItem(const CObjectStack &stk)
void WritePointer(TConstObjectPtr object, TTypeInfo typeInfo)
virtual void WriteDouble(double data)=0
MLIOVIR void WriteAlias(const CAliasTypeInfo *aliasType, TConstObjectPtr aliasPtr)
CObjectOStream(ESerialDataFormat format, CNcbiOstream &out, EOwnership deleteOut=eNoOwnership)
virtual void BeginChars(const CharBlock &block)
virtual void WriteGi(const TGi &obj)
virtual void UnendedFrame(void) override
bool CanSkipUnknownVariants(void)
Simple check if it's allowed to skip unknown variants.
MLIOVIR void WriteNamedType(TTypeInfo namedTypeInfo, TTypeInfo typeInfo, TConstObjectPtr object)
MLIOVIR void CopyContainer(const CContainerTypeInfo *containerType, CObjectStreamCopier &copier)
EDelayBufferParsing GetDelayBufferParsingPolicy(void) const
virtual void EndClass(void)
virtual void EndChoiceVariant(void)
TConstObjectPtr GetObjectPtr(void) const
Get pointer to object.
virtual void EndNamedType(void)
virtual void BeginClass(const CClassTypeInfo *classInfo)=0
void WriteSeparateObject(const CConstObjectInfo &object)
static CObjectOStream * OpenObjectOStreamXml(CNcbiOstream &out, EOwnership deleteOut)
EDelayBufferParsing
DelayBuffer parsing policy.
TFailFlags SetFailFlags(TFailFlags flags, const char *message)
Set fail flags.
void DuplicatedMember(const CMemberInfo *memberInfo)
virtual void SetFormattingFlags(TSerial_Format_Flags flags)
Set output formatting flags.
#define RethrowError(flag, mess, exc)
THook GetHook(CObjectStack &stk) const
MLIOVIR void CopyChoice(const CChoiceTypeInfo *choiceType, CObjectStreamCopier &copier)
#define END_OBJECT_FRAME_OF(Stream)
virtual void BeginContainerElement(TTypeInfo elementType)
void SetPathWriteVariantHook(const string &path, CWriteChoiceVariantHook *hook)
virtual void EndChoice(void)
virtual void BeginClassMember(const CMemberId &id)=0
virtual void WriteOtherBegin(TTypeInfo typeInfo)=0
virtual void EndContainer(void)
void ResetLocalHooks(void)
static ESerialVerifyData x_GetVerifyDataDefault(void)
ESerialVerifyData GetVerifyData(void) const
Get output data verification parameter.
virtual void BeginChoice(const CChoiceTypeInfo *choiceType)
virtual void EndChoiceVariant(void)
void WriteChoiceVariant(const CConstObjectInfoCV &member)
MLIOVIR void CopyClassSequential(const CClassTypeInfo *objectType, CObjectStreamCopier &copier)
@ fFormatError
Input file formatting does not conform with specification.
@ fIllegalCall
Illegal in a given context function call.
@ fInvalidData
Output data is incorrect.
@ fNotOpen
No output file.
@ fNotImplemented
Method is not implemented.
@ fUnassigned
Mandatory object member is unassigned Normally this results in throwing CUnassignedMember exception.
@ fOverflow
Internal buffer overflow.
@ fWriteError
An unknown error when writing into output file.
@ fFail
Internal error, the real reason is unclear.
@ eIoError
An unknown error during serialization.
@ eInvalidData
Data is incorrect.
@ eOverflow
Data is beyond the allowed limits.
@ eNotOpen
No input or output file.
@ eFail
Internal error, the real reason is unclear.
@ eNotImplemented
Attempt to use unimplemented funtionality.
@ eIllegalCall
Illegal in a given context function call.
@ eDelayBufferPolicyAlwaysParse
Parse always.
@ eDelayBufferPolicyNotSet
Parse only if local hook are present.
#define END_NCBI_SCOPE
End previously defined NCBI scope.
#define BEGIN_NCBI_SCOPE
Define ncbi namespace.
void Write(const char *data, size_t dataLength)
CNcbiStreampos GetStreamPos(void) const
void SetCanceledCallback(const ICanceled *callback)
const char * GetError(void) const
Int8 NcbiStreamposToInt8(NCBI_NS_STD::char_traits< char >::pos_type stream_pos)
Convert stream position to 64-bit int.
IO_PREFIX::ofstream CNcbiOfstream
Portable alias for ofstream.
IO_PREFIX::ostream CNcbiOstream
Portable alias for ostream.
IO_PREFIX::streampos CNcbiStreampos
Portable alias for streampos.
static string Int8ToString(Int8 value, TNumToStringFlags flags=0, int base=10)
Convert Int8 to string.
static int CompareNocase(const CTempString s1, SIZE_TYPE pos, SIZE_TYPE n, const char *s2)
Case-insensitive compare of a substring with another string.
static void PtrToString(string &out_str, const void *ptr)
Convert pointer to string.
const string & GetName(void) const
Get name of this type.
virtual TTypeInfo GetRealTypeInfo(TConstObjectPtr object) const
TTypeInfo GetPointedType(void) const
const CItemsInfo & GetVariants(void) const
bool MayBeEmpty(void) const
const CMemberInfo * GetMemberInfo(TMemberIndex index) const
const CVariantInfo * GetVariantInfo(TMemberIndex index) const
TObjectPtr GetDataPtr(TObjectPtr objectPtr) const
TConstObjectPtr GetElementPtr(const CConstIterator &it) const
void SetPathWriteHook(CObjectOStream *out, const string &path, CWriteObjectHook *hook)
Set local context-specific write hook.
bool InitIterator(CConstIterator &it, TConstObjectPtr containerPtr) const
bool NextElement(CConstIterator &it) const
TConstObjectPtr GetObjectPointer(TConstObjectPtr object) const
const CItemsInfo & GetMembers(void) const
bool IsFullAlias(void) const
TTypeInfo GetElementType(void) const
enum ENcbiOwnership EOwnership
Ownership relations between objects.
#define ErrCode()
Get the error code for the last failed system function.
Definition of all error codes used in serial libraries (xser.lib, xcser.lib).
const TYPE & Get(const CNamedParameterList *param)
const struct ncbi::grid::netcache::search::fields::SIZE size
const CharType(& source)[N]
Defines MS Windows specifics for our "C++" code.
Static variables safety - create on demand, destroy on application termination.
Multi-threading – mutexes; rw-locks; semaphore.
Multi-threading – classes, functions, and features.
std::istream & in(std::istream &in_, double &x_)
NCBI_PARAM_ENUM_DECL(ESerialVerifyData, SERIAL, VERIFY_DATA_WRITE)
NCBI_PARAM_DECL(bool, SERIAL, FastWriteDouble)
NCBI_PARAM_ENUM_DEF(ESerialVerifyData, SERIAL, VERIFY_DATA_WRITE, eSerialVerifyData_Default)
static CSafeStatic< TFastWriteDouble > s_FastWriteDouble
typedef NCBI_PARAM_TYPE(SERIAL, FastWriteDouble) TFastWriteDouble
NCBI_PARAM_ENUM_ARRAY(ESerialVerifyData, SERIAL, VERIFY_DATA_WRITE)
NCBI_PARAM_DEF(bool, SERIAL, FastWriteDouble, true)
#define VIRTUAL_MID_LEVEL_IO
static SLJIT_INLINE sljit_ins msg(sljit_gpr r, sljit_s32 d, sljit_gpr x, sljit_gpr b)