aboutsummaryrefslogtreecommitdiff
path: root/PDContainer/tinyxml/tinystr.h
diff options
context:
space:
mode:
Diffstat (limited to 'PDContainer/tinyxml/tinystr.h')
-rwxr-xr-xPDContainer/tinyxml/tinystr.h250
1 files changed, 250 insertions, 0 deletions
diff --git a/PDContainer/tinyxml/tinystr.h b/PDContainer/tinyxml/tinystr.h
new file mode 100755
index 0000000..3960502
--- /dev/null
+++ b/PDContainer/tinyxml/tinystr.h
@@ -0,0 +1,250 @@
+/*
+www.sourceforge.net/projects/tinyxml
+Original file by Yves Berquin.
+
+This software is provided 'as-is', without any express or implied
+warranty. In no event will the authors be held liable for any
+damages arising from the use of this software.
+
+Permission is granted to anyone to use this software for any
+purpose, including commercial applications, and to alter it and
+redistribute it freely, subject to the following restrictions:
+
+1. The origin of this software must not be misrepresented; you must
+not claim that you wrote the original software. If you use this
+software in a product, an acknowledgment in the product documentation
+would be appreciated but is not required.
+
+2. Altered source versions must be plainly marked as such, and
+must not be misrepresented as being the original software.
+
+3. This notice may not be removed or altered from any source
+distribution.
+*/
+
+#include "tinyxml.h"
+
+
+#ifndef TIXML_USE_STL
+
+#ifndef TIXML_STRING_INCLUDED
+#define TIXML_STRING_INCLUDED
+
+#ifdef _MSC_VER
+#pragma warning( disable : 4530 )
+#pragma warning( disable : 4786 )
+#endif
+
+#include <assert.h>
+
+/*
+ TiXmlString is an emulation of the std::string template.
+ Its purpose is to allow compiling TinyXML on compilers with no or poor STL support.
+ Only the member functions relevant to the TinyXML project have been implemented.
+ The buffer allocation is made by a simplistic power of 2 like mechanism : if we increase
+ a string and there's no more room, we allocate a buffer twice as big as we need.
+*/
+class TiXmlString
+{
+ public :
+ // TiXmlString constructor, based on a string, mark explicit to force
+ // us to find unnecessary casting.
+ explicit TiXmlString (const char * instring);
+
+ // TiXmlString empty constructor
+ TiXmlString ()
+ {
+ allocated = 0;
+ cstring = NULL;
+ current_length = 0;
+ }
+
+ // TiXmlString copy constructor
+ explicit TiXmlString (const TiXmlString& copy);
+
+ // TiXmlString destructor
+ ~ TiXmlString ()
+ {
+ empty_it ();
+ }
+
+ // Convert a TiXmlString into a classical char *
+ const char * c_str () const
+ {
+ if (allocated)
+ return cstring;
+ return "";
+ }
+
+ // Return the length of a TiXmlString
+ size_t length () const
+ {
+ return ( allocated ) ? current_length : 0;
+ }
+
+ // TiXmlString = operator
+ void operator = (const char * content);
+
+ // = operator
+ void operator = (const TiXmlString & copy);
+
+ // += operator. Maps to append
+ TiXmlString& operator += (const char * suffix)
+ {
+ append (suffix);
+ return *this;
+ }
+
+ // += operator. Maps to append
+ TiXmlString& operator += (char single)
+ {
+ append (single);
+ return *this;
+ }
+
+ // += operator. Maps to append
+ TiXmlString& operator += (TiXmlString & suffix)
+ {
+ append (suffix);
+ return *this;
+ }
+ bool operator == (const TiXmlString & compare) const;
+ bool operator == (const char* compare) const;
+ bool operator < (const TiXmlString & compare) const;
+ bool operator > (const TiXmlString & compare) const;
+
+ // Checks if a TiXmlString is empty
+ bool empty () const
+ {
+ return length () ? false : true;
+ }
+
+ // single char extraction
+ const char& at (unsigned index) const
+ {
+ assert( index < length ());
+ return cstring [index];
+ }
+
+ // find a char in a string. Return TiXmlString::notfound if not found
+ unsigned find (char lookup) const
+ {
+ return find (lookup, 0);
+ }
+
+ // find a char in a string from an offset. Return TiXmlString::notfound if not found
+ unsigned find (char tofind, unsigned offset) const;
+
+ /* Function to reserve a big amount of data when we know we'll need it. Be aware that this
+ function clears the content of the TiXmlString if any exists.
+ */
+ void reserve (unsigned size)
+ {
+ empty_it ();
+ if (size)
+ {
+ allocated = size;
+ cstring = new char [size];
+ cstring [0] = 0;
+ current_length = 0;
+ }
+ }
+
+ // [] operator
+ char& operator [] (unsigned index) const
+ {
+ assert( index < length ());
+ return cstring [index];
+ }
+
+ // Error value for find primitive
+ enum { notfound = 0xffffffff,
+ npos = notfound };
+
+ void append (const char *str, size_t len );
+
+ protected :
+
+ // The base string
+ char * cstring;
+ // Number of chars allocated
+ size_t allocated;
+ // Current string size
+ size_t current_length;
+
+ // New size computation. It is simplistic right now : it returns twice the amount
+ // we need
+ size_t assign_new_size (size_t minimum_to_allocate)
+ {
+ return minimum_to_allocate * 2;
+ }
+
+ // Internal function that clears the content of a TiXmlString
+ void empty_it ()
+ {
+ if (cstring)
+ delete [] cstring;
+ cstring = NULL;
+ allocated = 0;
+ current_length = 0;
+ }
+
+ void append (const char *suffix );
+
+ // append function for another TiXmlString
+ void append (const TiXmlString & suffix)
+ {
+ append (suffix . c_str ());
+ }
+
+ // append for a single char.
+ void append (char single)
+ {
+ if ( cstring && current_length < (allocated-1) )
+ {
+ cstring[ current_length ] = single;
+ ++current_length;
+ cstring[ current_length ] = 0;
+ }
+ else
+ {
+ char smallstr [2];
+ smallstr [0] = single;
+ smallstr [1] = 0;
+ append (smallstr);
+ }
+ }
+
+} ;
+
+/*
+ TiXmlOutStream is an emulation of std::ostream. It is based on TiXmlString.
+ Only the operators that we need for TinyXML have been developped.
+*/
+class TiXmlOutStream : public TiXmlString
+{
+public :
+ TiXmlOutStream () : TiXmlString () {}
+
+ // TiXmlOutStream << operator. Maps to TiXmlString::append
+ TiXmlOutStream & operator << (const char * in)
+ {
+ append (in);
+ return (* this);
+ }
+
+ // TiXmlOutStream << operator. Maps to TiXmlString::append
+ TiXmlOutStream & operator << (const TiXmlString & in)
+ {
+ append (in . c_str ());
+ return (* this);
+ }
+} ;
+
+#ifdef _MSC_VER
+#pragma warning( default : 4530 )
+#pragma warning( default : 4786 )
+#endif
+
+#endif // TIXML_STRING_INCLUDED
+#endif // TIXML_USE_STL