replace C-style typedefs with C++ structs for easier forward declarations of XNode

This commit is contained in:
Chris Danford
2004-04-18 10:41:54 +00:00
parent 68e2315224
commit 0a40998859
2 changed files with 76 additions and 71 deletions
+46 -46
View File
@@ -220,12 +220,12 @@ void _SetString( char* psz, char* end, CString* ps, bool trim = false, int escap
}
}
_tagXMLNode::~_tagXMLNode()
XNode::~XNode()
{
Close();
}
void _tagXMLNode::Close()
void XNode::Close()
{
unsigned i;
@@ -262,7 +262,7 @@ void _tagXMLNode::Close()
// Coder Date Desc
// bro 2002-10-29
//========================================================
char* _tagXMLNode::LoadAttributes( const char* pszAttrs , LPPARSEINFO pi /*= &piDefault*/)
char* XNode::LoadAttributes( const char* pszAttrs , LPPARSEINFO pi /*= &piDefault*/)
{
char* xml = (char*)pszAttrs;
@@ -359,7 +359,7 @@ char* _tagXMLNode::LoadAttributes( const char* pszAttrs , LPPARSEINFO pi /*= &pi
// Coder Date Desc
// bro 2002-10-29
//========================================================
char* _tagXMLNode::Load( const char* pszXml, LPPARSEINFO pi /*= &piDefault*/ )
char* XNode::Load( const char* pszXml, LPPARSEINFO pi /*= &piDefault*/ )
{
// Close it
Close();
@@ -552,7 +552,7 @@ char* _tagXMLNode::Load( const char* pszXml, LPPARSEINFO pi /*= &piDefault*/ )
// Coder Date Desc
// bro 2002-10-29
//========================================================
CString _tagXMLAttr::GetXML( LPDISP_OPT opt /*= &optDefault*/ )
CString XAttr::GetXML( LPDISP_OPT opt /*= &optDefault*/ )
{
std::ostringstream os;
//os << (const char*)name << "='" << (const char*)value << "' ";
@@ -570,7 +570,7 @@ CString _tagXMLAttr::GetXML( LPDISP_OPT opt /*= &optDefault*/ )
// Coder Date Desc
// bro 2002-10-29
//========================================================
CString _tagXMLNode::GetXML( LPDISP_OPT opt /*= &optDefault*/ )
CString XNode::GetXML( LPDISP_OPT opt /*= &optDefault*/ )
{
std::ostringstream os;
@@ -651,7 +651,7 @@ CString _tagXMLNode::GetXML( LPDISP_OPT opt /*= &optDefault*/ )
// Coder Date Desc
// bro 2002-10-29
//========================================================
const LPXAttr _tagXMLNode::GetAttr( const char* attrname ) const
const LPXAttr XNode::GetAttr( const char* attrname ) const
{
for( unsigned i = 0 ; i < attrs.size(); i++ )
{
@@ -665,7 +665,7 @@ const LPXAttr _tagXMLNode::GetAttr( const char* attrname ) const
return NULL;
}
LPXAttr _tagXMLNode::GetAttr( const char* attrname )
LPXAttr XNode::GetAttr( const char* attrname )
{
for( unsigned i = 0 ; i < attrs.size(); i++ )
{
@@ -688,7 +688,7 @@ LPXAttr _tagXMLNode::GetAttr( const char* attrname )
// Coder Date Desc
// bro 2002-10-29
//========================================================
XAttrs _tagXMLNode::GetAttrs( const char* name )
XAttrs XNode::GetAttrs( const char* name )
{
XAttrs attrs;
for( unsigned i = 0 ; i < attrs.size(); i++ )
@@ -712,13 +712,13 @@ XAttrs _tagXMLNode::GetAttrs( const char* name )
// Coder Date Desc
// bro 2002-10-29
//========================================================
const char* _tagXMLNode::GetAttrValue( const char* attrname )
const char* XNode::GetAttrValue( const char* attrname )
{
LPXAttr attr = GetAttr( attrname );
return attr ? (const char*)attr->value : NULL;
}
XNodes _tagXMLNode::GetChilds()
XNodes XNode::GetChilds()
{
return childs;
}
@@ -732,7 +732,7 @@ XNodes _tagXMLNode::GetChilds()
// Coder Date Desc
// bro 2002-10-29
//========================================================
XNodes _tagXMLNode::GetChilds( const char* name )
XNodes XNode::GetChilds( const char* name )
{
XNodes nodes;
for( unsigned i = 0 ; i < childs.size(); i++ )
@@ -756,7 +756,7 @@ XNodes _tagXMLNode::GetChilds( const char* name )
// Coder Date Desc
// bro 2002-10-29
//========================================================
LPXNode _tagXMLNode::GetChild( int i )
LPXNode XNode::GetChild( int i )
{
if( i >= 0 && i < (int)childs.size() )
return childs[i];
@@ -772,7 +772,7 @@ LPXNode _tagXMLNode::GetChild( int i )
// Coder Date Desc
// bro 2002-12-26
//========================================================
int _tagXMLNode::GetChildCount()
int XNode::GetChildCount()
{
return childs.size();
}
@@ -786,7 +786,7 @@ int _tagXMLNode::GetChildCount()
// Coder Date Desc
// bro 2002-10-29
//========================================================
LPXNode _tagXMLNode::GetChild( const char* name )
LPXNode XNode::GetChild( const char* name )
{
for( unsigned i = 0 ; i < childs.size(); i++ )
{
@@ -800,7 +800,7 @@ LPXNode _tagXMLNode::GetChild( const char* name )
return NULL;
}
const LPXNode _tagXMLNode::GetChild( const char* name ) const
const LPXNode XNode::GetChild( const char* name ) const
{
for( unsigned i = 0 ; i < childs.size(); i++ )
{
@@ -823,19 +823,19 @@ const LPXNode _tagXMLNode::GetChild( const char* name ) const
// Coder Date Desc
// bro 2002-10-29
//========================================================
const char* _tagXMLNode::GetChildValue( const char* name )
const char* XNode::GetChildValue( const char* name )
{
LPXNode node = GetChild( name );
return (node != NULL)? (const char*)node->value : NULL;
}
LPXAttr _tagXMLNode::GetChildAttr( const char* name, const char* attrname )
LPXAttr XNode::GetChildAttr( const char* name, const char* attrname )
{
LPXNode node = GetChild(name);
return node ? node->GetAttr(attrname) : NULL;
}
const char* _tagXMLNode::GetChildAttrValue( const char* name, const char* attrname )
const char* XNode::GetChildAttrValue( const char* name, const char* attrname )
{
LPXAttr attr = GetChildAttr( name, attrname );
return attr ? (const char*)attr->value : NULL;
@@ -851,7 +851,7 @@ const char* _tagXMLNode::GetChildAttrValue( const char* name, const char* attrna
// Coder Date Desc
// bro 2002-10-29
//========================================================
XNodes::iterator _tagXMLNode::GetChildIterator( LPXNode node )
XNodes::iterator XNode::GetChildIterator( LPXNode node )
{
XNodes::iterator it = childs.begin();
for( ; it != childs.end() ; ++(it) )
@@ -871,17 +871,17 @@ XNodes::iterator _tagXMLNode::GetChildIterator( LPXNode node )
// Coder Date Desc
// bro 2002-10-29
//========================================================
LPXNode _tagXMLNode::AppendChild( const char* name /*= NULL*/, const char* value /*= NULL*/ )
LPXNode XNode::AppendChild( const char* name /*= NULL*/, const char* value /*= NULL*/ )
{
return AppendChild( CreateNode( name, value ) );
}
LPXNode _tagXMLNode::AppendChild( const char* name /*= NULL*/, float value /*= NULL*/ )
LPXNode XNode::AppendChild( const char* name /*= NULL*/, float value /*= NULL*/ )
{
return AppendChild( name, ssprintf("%f",value) );
}
LPXNode _tagXMLNode::AppendChild( const char* name /*= NULL*/, int value /*= NULL*/ )
LPXNode XNode::AppendChild( const char* name /*= NULL*/, int value /*= NULL*/ )
{
return AppendChild( name, ssprintf("%d",value) );
}
@@ -895,7 +895,7 @@ LPXNode _tagXMLNode::AppendChild( const char* name /*= NULL*/, int value /*= NUL
// Coder Date Desc
// bro 2002-10-29
//========================================================
LPXNode _tagXMLNode::AppendChild( LPXNode node )
LPXNode XNode::AppendChild( LPXNode node )
{
node->parent = this;
childs.push_back( node );
@@ -911,7 +911,7 @@ LPXNode _tagXMLNode::AppendChild( LPXNode node )
// Coder Date Desc
// bro 2002-10-29
//========================================================
bool _tagXMLNode::RemoveChild( LPXNode node )
bool XNode::RemoveChild( LPXNode node )
{
XNodes::iterator it = GetChildIterator( node );
if( it != childs.end() )
@@ -932,7 +932,7 @@ bool _tagXMLNode::RemoveChild( LPXNode node )
// Coder Date Desc
// bro 2002-10-29
//========================================================
LPXAttr _tagXMLNode::GetAttr( int i )
LPXAttr XNode::GetAttr( int i )
{
if( i >= 0 && i < (int)attrs.size() )
return attrs[i];
@@ -948,7 +948,7 @@ LPXAttr _tagXMLNode::GetAttr( int i )
// Coder Date Desc
// bro 2002-10-29
//========================================================
XAttrs::iterator _tagXMLNode::GetAttrIterator( LPXAttr attr )
XAttrs::iterator XNode::GetAttrIterator( LPXAttr attr )
{
XAttrs::iterator it = attrs.begin();
for( ; it != attrs.end() ; ++(it) )
@@ -968,7 +968,7 @@ XAttrs::iterator _tagXMLNode::GetAttrIterator( LPXAttr attr )
// Coder Date Desc
// bro 2002-10-29
//========================================================
LPXAttr _tagXMLNode::AppendAttr( LPXAttr attr )
LPXAttr XNode::AppendAttr( LPXAttr attr )
{
attr->parent = this;
attrs.push_back( attr );
@@ -984,7 +984,7 @@ LPXAttr _tagXMLNode::AppendAttr( LPXAttr attr )
// Coder Date Desc
// bro 2002-10-29
//========================================================
bool _tagXMLNode::RemoveAttr( LPXAttr attr )
bool XNode::RemoveAttr( LPXAttr attr )
{
XAttrs::iterator it = GetAttrIterator( attr );
if( it != attrs.end() )
@@ -1005,7 +1005,7 @@ bool _tagXMLNode::RemoveAttr( LPXAttr attr )
// Coder Date Desc
// bro 2002-10-29
//========================================================
LPXNode _tagXMLNode::CreateNode( const char* name /*= NULL*/, const char* value /*= NULL*/ )
LPXNode XNode::CreateNode( const char* name /*= NULL*/, const char* value /*= NULL*/ )
{
LPXNode node = new XNode;
node->name = name;
@@ -1022,7 +1022,7 @@ LPXNode _tagXMLNode::CreateNode( const char* name /*= NULL*/, const char* value
// Coder Date Desc
// bro 2002-10-29
//========================================================
LPXAttr _tagXMLNode::CreateAttr( const char* name /*= NULL*/, const char* value /*= NULL*/ )
LPXAttr XNode::CreateAttr( const char* name /*= NULL*/, const char* value /*= NULL*/ )
{
LPXAttr attr = new XAttr;
attr->name = name;
@@ -1039,13 +1039,13 @@ LPXAttr _tagXMLNode::CreateAttr( const char* name /*= NULL*/, const char* value
// Coder Date Desc
// bro 2002-10-29
//========================================================
LPXAttr _tagXMLNode::AppendAttr( const char* name /*= NULL*/, const char* value /*= NULL*/ )
LPXAttr XNode::AppendAttr( const char* name /*= NULL*/, const char* value /*= NULL*/ )
{
return AppendAttr( CreateAttr( name, value ) );
}
LPXAttr _tagXMLNode::AppendAttr( const char* name, float value ){ return AppendAttr(name,ssprintf("%f",value)); }
LPXAttr _tagXMLNode::AppendAttr( const char* name, int value ) { return AppendAttr(name,ssprintf("%d",value)); }
LPXAttr XNode::AppendAttr( const char* name, float value ){ return AppendAttr(name,ssprintf("%f",value)); }
LPXAttr XNode::AppendAttr( const char* name, int value ) { return AppendAttr(name,ssprintf("%d",value)); }
//========================================================
// Name : DetachChild
@@ -1056,7 +1056,7 @@ LPXAttr _tagXMLNode::AppendAttr( const char* name, int value ) { return AppendAt
// Coder Date Desc
// bro 2002-10-29
//========================================================
LPXNode _tagXMLNode::DetachChild( LPXNode node )
LPXNode XNode::DetachChild( LPXNode node )
{
XNodes::iterator it = GetChildIterator( node );
if( it != childs.end() )
@@ -1076,7 +1076,7 @@ LPXNode _tagXMLNode::DetachChild( LPXNode node )
// Coder Date Desc
// bro 2002-10-29
//========================================================
LPXAttr _tagXMLNode::DetachAttr( LPXAttr attr )
LPXAttr XNode::DetachAttr( LPXAttr attr )
{
XAttrs::iterator it = GetAttrIterator( attr );
if( it != attrs.end() )
@@ -1087,13 +1087,13 @@ LPXAttr _tagXMLNode::DetachAttr( LPXAttr attr )
return NULL;
}
_tagXMLEntitys::_tagXMLEntitys( LPXENTITY entities, int count )
XENTITYS::XENTITYS( LPXENTITY entities, int count )
{
for( int i = 0; i < count; i++)
push_back( entities[i] );
}
LPXENTITY _tagXMLEntitys::GetEntity( int entity )
LPXENTITY XENTITYS::GetEntity( int entity )
{
for( unsigned i = 0 ; i < size(); i ++ )
{
@@ -1103,7 +1103,7 @@ LPXENTITY _tagXMLEntitys::GetEntity( int entity )
return NULL;
}
LPXENTITY _tagXMLEntitys::GetEntity( char* entity )
LPXENTITY XENTITYS::GetEntity( char* entity )
{
for( unsigned i = 0 ; i < size(); i ++ )
{
@@ -1118,7 +1118,7 @@ LPXENTITY _tagXMLEntitys::GetEntity( char* entity )
return NULL;
}
int _tagXMLEntitys::GetEntityCount( const char* str )
int XENTITYS::GetEntityCount( const char* str )
{
int nCount = 0;
char* ps = (char*)str;
@@ -1127,7 +1127,7 @@ int _tagXMLEntitys::GetEntityCount( const char* str )
return nCount;
}
int _tagXMLEntitys::Ref2Entity( const char* estr, char* str, int strlen )
int XENTITYS::Ref2Entity( const char* estr, char* str, int strlen )
{
char* pes = (char*)estr;
char* ps = str;
@@ -1151,7 +1151,7 @@ int _tagXMLEntitys::Ref2Entity( const char* estr, char* str, int strlen )
return ps-str;
}
int _tagXMLEntitys::Entity2Ref( const char* str, char* estr, int estrlen )
int XENTITYS::Entity2Ref( const char* str, char* estr, int estrlen )
{
char* ps = (char*)str;
char* pes = (char*)estr;
@@ -1176,7 +1176,7 @@ int _tagXMLEntitys::Entity2Ref( const char* str, char* estr, int estrlen )
return pes-estr;
}
CString _tagXMLEntitys::Ref2Entity( const char* estr )
CString XENTITYS::Ref2Entity( const char* estr )
{
CString es;
if( estr )
@@ -1191,7 +1191,7 @@ CString _tagXMLEntitys::Ref2Entity( const char* estr )
return es;
}
CString _tagXMLEntitys::Entity2Ref( const char* str )
CString XENTITYS::Entity2Ref( const char* str )
{
CString s;
if( str )
@@ -1219,7 +1219,7 @@ CString XEntity2Ref( const char* str )
return entityDefault.Entity2Ref( str );
}
bool _tagXMLNode::LoadFromFile( CString sFile, LPPARSEINFO pi )
bool XNode::LoadFromFile( CString sFile, LPPARSEINFO pi )
{
RageFile f;
if( !f.Open(sFile, RageFile::READ) )
@@ -1233,7 +1233,7 @@ bool _tagXMLNode::LoadFromFile( CString sFile, LPPARSEINFO pi )
return true;
}
bool _tagXMLNode::SaveToFile( CString sFile, LPDISP_OPT opt )
bool XNode::SaveToFile( CString sFile, LPDISP_OPT opt )
{
RageFile f;
if( !f.Open(sFile, RageFile::WRITE) )
+30 -25
View File
@@ -22,22 +22,23 @@
#include <vector>
#include <RageUtil.h>
struct _tagXMLAttr;
typedef _tagXMLAttr XAttr, *LPXAttr;
struct XAttr;
typedef XAttr* LPXAttr;
typedef std::vector<LPXAttr> XAttrs;
struct _tagXMLNode;
typedef _tagXMLNode XNode, *LPXNode;
struct XNode;
typedef XNode* LPXNode;
typedef std::vector<LPXNode> XNodes, *LPXNodes;
// Entity Encode/Decode Support
typedef struct _tagXmlEntity
struct XENTITY
{
TCHAR entity; // entity ( & " ' < > )
TCHAR ref[10]; // entity reference ( &amp; &quot; etc )
int ref_len; // entity reference length
}XENTITY,*LPXENTITY;
};
typedef XENTITY* LPXENTITY;
typedef struct _tagXMLEntitys : public std::vector<XENTITY>
struct XENTITYS : public std::vector<XENTITY>
{
LPXENTITY GetEntity( int entity );
LPXENTITY GetEntity( char* entity );
@@ -47,24 +48,25 @@ typedef struct _tagXMLEntitys : public std::vector<XENTITY>
CString Ref2Entity( const char* estr );
CString Entity2Ref( const char* str );
_tagXMLEntitys(){};
_tagXMLEntitys( LPXENTITY entities, int count );
}XENTITYS,*LPXENTITYS;
XENTITYS(){};
XENTITYS( LPXENTITY entities, int count );
};
typedef XENTITYS* LPXENTITYS;
extern XENTITYS entityDefault;
CString XRef2Entity( const char* estr );
CString XEntity2Ref( const char* str );
typedef enum
enum PCODE
{
PIE_PARSE_WELFORMED = 0,
PIE_ALONE_NOT_CLOSED,
PIE_NOT_CLOSED,
PIE_NOT_NESTED,
PIE_ATTR_NO_VALUE
}PCODE;
};
// Parse info.
typedef struct _tagParseInfo
struct PARSEINFO
{
bool trim_value; // [set] do trim when parse?
bool entity_value; // [set] do convert from reference to entity? ( &lt; -> < )
@@ -77,24 +79,26 @@ typedef struct _tagParseInfo
PCODE error_code; // [get] error code
CString error_string; // [get] error string
_tagParseInfo() { trim_value = true; entity_value = true; entitys = &entityDefault; xml = NULL; erorr_occur = false; error_pointer = NULL; error_code = PIE_PARSE_WELFORMED; escape_value = 0; }
}PARSEINFO,*LPPARSEINFO;
PARSEINFO() { trim_value = true; entity_value = true; entitys = &entityDefault; xml = NULL; erorr_occur = false; error_pointer = NULL; error_code = PIE_PARSE_WELFORMED; escape_value = 0; }
};
typedef PARSEINFO* LPPARSEINFO;
extern PARSEINFO piDefault;
// display optional environment
typedef struct _tagDispOption
struct DISP_OPT
{
bool newline; // newline when new tag
bool reference_value; // do convert from entity to reference ( < -> &lt; )
LPXENTITYS entitys; // entity table for entity encode
int tab_base; // internal usage
_tagDispOption() { newline = true; reference_value = true; entitys = &entityDefault; tab_base = 0; }
}DISP_OPT, *LPDISP_OPT;
DISP_OPT() { newline = true; reference_value = true; entitys = &entityDefault; tab_base = 0; }
};
typedef DISP_OPT* LPDISP_OPT;
extern DISP_OPT optDefault;
// XAttr : Attribute Implementation
typedef struct _tagXMLAttr
struct XAttr
{
CString name;
CString value;
@@ -103,13 +107,14 @@ typedef struct _tagXMLAttr
void GetValue(float &out) const { out = (float) atof(value); }
void GetValue(bool &out) const { out = atoi(value) != 0; }
_tagXMLNode* parent;
XNode* parent;
CString GetXML( LPDISP_OPT opt = &optDefault );
}XAttr, *LPXAttr;
};
typedef XAttr* LPXAttr;
// XMLNode structure
typedef struct _tagXMLNode
struct XNode
{
// name and value
CString name;
@@ -182,11 +187,11 @@ typedef struct _tagXMLNode
// operator overloads
LPXNode operator [] ( int i ) { return GetChild(i); }
_tagXMLNode() { parent = NULL; }
~_tagXMLNode();
XNode() { parent = NULL; }
~XNode();
void Close();
}XNode, *LPXNode;
};
// Helper Funtion
inline long XStr2Int( const char* str, long default_value = 0 )