29#ifndef SN_SIMPLE_XML_WRITER_H
30#define SN_SIMPLE_XML_WRITER_H
32#include "foundation/PxArray.h"
33#include "SnXmlMemoryPoolStreams.h"
35namespace physx {
namespace Sn {
49 mWriter.beginTag( inTagName );
57 virtual void beginTag(
const char* inTagname ) = 0;
58 virtual void endTag() = 0;
59 virtual void addAttribute(
const char* inName,
const char* inValue ) = 0;
60 virtual void writeContentTag(
const char* inTag,
const char* inContent ) = 0;
61 virtual void addContent(
const char* inContent ) = 0;
62 virtual PxU32 tabCount() = 0;
67 template<
typename TStreamType>
76 PxU32 mInitialTagDepth;
80 : mWrapper( inAllocator )
84 , mInitialTagDepth( inInitialTagDepth )
92 PxU32 tabCount() {
return mTags.
size() + mInitialTagDepth; }
94 void writeTabs( PxU32 inSize )
96 inSize += mInitialTagDepth;
97 for ( PxU32 idx =0; idx < inSize; ++idx )
100 void beginTag(
const char* inTagname )
103 writeTabs(mTags.
size());
105 mStream <<
"<" << inTagname;
108 void addAttribute(
const char* inName,
const char* inValue )
110 PX_ASSERT( mTagOpen );
111 mStream <<
" " << inName <<
"=" <<
"\"" << inValue <<
"\"";
113 void closeTag(
bool useNewline =
true)
117 mStream <<
" " <<
">";
125 mStream <<
"</" << mTags.
back() <<
">" <<
"\n";
129 PX_ASSERT( mTags.
size() );
131 mStream <<
" " <<
"/>" <<
"\n";
134 writeTabs(mTags.
size()-1);
141 static bool IsNormalizableWhitespace(
char c) {
return c == 0x9 || c == 0xA || c == 0xD; }
142 static bool IsValidXmlCharacter(
char c) {
return IsNormalizableWhitespace(c) || c >= 0x20; }
144 void addContent(
const char* inContent )
148 for( ; *inContent; inContent++ )
168 if (IsValidXmlCharacter(*inContent)) {
169 if (IsNormalizableWhitespace(*inContent))
172 Pxsnprintf(s, 32,
"&#x%02X;",
unsigned(*inContent));
176 mStream << *inContent;
183 void writeContentTag(
const char* inTag,
const char* inContent )
186 addContent( inContent );
190 void insertXml(
const char* inXml )
199 const char* mTagName;
201 : mTagName( inTagName ) { }
211 const char* mAttName;
212 const char* mAttValue;
213 Att(
const char* inAttName,
const char* inAttValue )
214 : mAttName( inAttName )
215 , mAttValue( inAttValue ) { }
220 const char* mContent;
221 Content(
const char* inContent )
222 : mContent( inContent ) { }
228 const char* mTagName;
229 const char* mContent;
230 ContentTag(
const char* inTagName,
const char* inContent )
231 : mTagName( inTagName )
232 , mContent( inContent ) { }
237 inline SimpleXmlWriter& operator<<( SimpleXmlWriter& inWriter,
const Att& inTag ) { inWriter.addAttribute(inTag.mAttName, inTag.mAttValue);
return inWriter; }
238 inline SimpleXmlWriter& operator<<( SimpleXmlWriter& inWriter,
const Content& inTag ) { inWriter.addContent(inTag.mContent);
return inWriter; }
239 inline SimpleXmlWriter& operator<<( SimpleXmlWriter& inWriter,
const ContentTag& inTag ) { inWriter.writeContentTag(inTag.mTagName, inTag.mContent);
return inWriter; }
241 inline void writeProperty( SimpleXmlWriter& inWriter, MemoryBuffer& tempBuffer,
const char* inPropName )
244 tempBuffer.write( &data,
sizeof(PxU8) );
245 inWriter.writeContentTag( inPropName,
reinterpret_cast<const char*
>( tempBuffer.mBuffer ) );
249 template<
typename TDataType>
250 inline void writeProperty( SimpleXmlWriter& inWriter, MemoryBuffer& tempBuffer,
const char* inPropName, TDataType inValue )
252 tempBuffer << inValue;
253 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 SnSimpleXmlWriter.h:69
Definition SnSimpleXmlWriter.h:37
Sorts an array of objects in ascending order, assuming that the predicate implements the < operator:
Definition PxBoxController.h:39
Definition SnSimpleXmlWriter.h:210
Definition SnSimpleXmlWriter.h:198
Definition SnSimpleXmlWriter.h:227
Definition SnSimpleXmlWriter.h:219
Definition SnSimpleXmlWriter.h:205
Definition SnSimpleXmlWriter.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