29#ifndef SN_XML_SIMPLE_XML_WRITER_H
30#define SN_XML_SIMPLE_XML_WRITER_H
32#include "foundation/PxArray.h"
33#include "SnXmlMemoryPoolStreams.h"
35namespace physx {
namespace Sn {
49 mWriter.beginTag( inTagName );
55 virtual void beginTag(
const char* inTagname ) = 0;
56 virtual void endTag() = 0;
57 virtual void addAttribute(
const char* inName,
const char* inValue ) = 0;
58 virtual void writeContentTag(
const char* inTag,
const char* inContent ) = 0;
59 virtual void addContent(
const char* inContent ) = 0;
60 virtual PxU32 tabCount() = 0;
63 template<
typename TStreamType>
72 PxU32 mInitialTagDepth;
76 : mWrapper( inAllocator )
80 , mInitialTagDepth( inInitialTagDepth )
83 virtual ~XmlWriterImpl()
88 PxU32 tabCount() {
return mTags.
size() + mInitialTagDepth; }
90 void writeTabs( PxU32 inSize )
92 inSize += mInitialTagDepth;
93 for ( PxU32 idx =0; idx < inSize; ++idx )
96 void beginTag(
const char* inTagname )
99 writeTabs(mTags.
size());
101 mStream <<
"<" << inTagname;
104 void addAttribute(
const char* inName,
const char* inValue )
106 PX_ASSERT( mTagOpen );
107 mStream <<
" " << inName <<
"=" <<
"\"" << inValue <<
"\"";
109 void closeTag(
bool useNewline =
true)
113 mStream <<
" " <<
">";
121 mStream <<
"</" << mTags.
back() <<
">" <<
"\n";
125 PX_ASSERT( mTags.
size() );
127 mStream <<
" " <<
"/>" <<
"\n";
130 writeTabs(mTags.
size()-1);
136 void addContent(
const char* inContent )
139 mStream << inContent;
141 void writeContentTag(
const char* inTag,
const char* inContent )
144 addContent( inContent );
148 void insertXml(
const char* inXml )
157 const char* mTagName;
158 BeginTag(
const char* inTagName )
159 : mTagName( inTagName ) { }
169 const char* mAttName;
170 const char* mAttValue;
171 Att(
const char* inAttName,
const char* inAttValue )
172 : mAttName( inAttName )
173 , mAttValue( inAttValue ) { }
178 const char* mContent;
179 Content(
const char* inContent )
180 : mContent( inContent ) { }
186 const char* mTagName;
187 const char* mContent;
188 ContentTag(
const char* inTagName,
const char* inContent )
189 : mTagName( inTagName )
190 , mContent( inContent ) { }
193 inline XmlWriter& operator<<( XmlWriter& inWriter,
const BeginTag& inTag ) { inWriter.beginTag( inTag.mTagName );
return inWriter; }
194 inline XmlWriter& operator<<( XmlWriter& inWriter,
const EndTag& inTag ) { inWriter.endTag();
return inWriter; }
195 inline XmlWriter& operator<<( XmlWriter& inWriter,
const Att& inTag ) { inWriter.addAttribute(inTag.mAttName, inTag.mAttValue);
return inWriter; }
196 inline XmlWriter& operator<<( XmlWriter& inWriter,
const Content& inTag ) { inWriter.addContent(inTag.mContent);
return inWriter; }
197 inline XmlWriter& operator<<( XmlWriter& inWriter,
const ContentTag& inTag ) { inWriter.writeContentTag(inTag.mTagName, inTag.mContent);
return inWriter; }
199 inline void writeProperty( XmlWriter& inWriter, MemoryBuffer& tempBuffer,
const char* inPropName )
202 tempBuffer.write( &data,
sizeof(PxU8) );
203 inWriter.writeContentTag( inPropName,
reinterpret_cast<const char*
>( tempBuffer.mBuffer ) );
207 template<
typename TDataType>
208 inline void writeProperty( XmlWriter& inWriter, MemoryBuffer& tempBuffer,
const char* inPropName, TDataType inValue )
210 tempBuffer << inValue;
211 writeProperty( inWriter, tempBuffer, inPropName );
Abstract base class for an application defined memory allocator that can be used by the Nv library.
Definition PxAllocatorCallback.h:53
PX_FORCE_INLINE uint32_t size() const
Definition PxArray.h:242
PX_FORCE_INLINE T & pushBack(const T &a)
Definition PxArray.h:296
PX_INLINE T popBack()
Definition PxArray.h:311
PX_FORCE_INLINE const T & back() const
Definition PxArray.h:224
Definition SnXmlSimpleXmlWriter.h:37
Sorts an array of objects in ascending order, assuming that the predicate implements the < operator:
Definition PxBoxController.h:39
Definition SnXmlSerialization.cpp:111
Definition SnXmlSimpleXmlWriter.h:41
Helper struct to encapsulate the user allocator callback Useful for array and hash templates.
Definition PxProfileAllocatorWrapper.h:46
Helper struct to encapsulate the array.
Definition PxProfileAllocatorWrapper.h:152