#ifndef XML_STRING #define XML_STRING typedef String xml_string; /* #include #include class xml_string { public: xml_string() { m_sBuf=NULL; } xml_string(const char *s) { m_sBuf=NULL; set(s); } xml_string(const wchar_t *s) { m_sBuf=NULL; set(s); } ~xml_string() { if(m_sBuf) free(m_sBuf); m_sBuf=NULL; } void set(const char *s) { if(m_sBuf)free(m_sBuf); size_t len=strlen(s); m_sBuf=(unsigned char*)malloc(len+2); m_sBuf[0]=0; strcpy((char *)&m_sBuf[1],s); } void set(const wchar_t *s) { if(m_sBuf)free(m_sBuf); size_t len=wcslen(s); m_sBuf=(unsigned char*)malloc((len+2)*sizeof(wchar_t)); m_sBuf[0]=1; wcscpy(((wchar_t *)&m_sBuf[1]),s); } const char *c_str_s() { if(!m_sBuf) return NULL; if(m_sBuf[0]!=0) { unsigned char *t=m_sBuf; m_sBuf=wide2single((const wchar_t *)&t[1]); free(t); return ((const char *)&m_sBuf[1]); } return ((const char *)&m_sBuf[1]); } const wchar_t *c_str_w() { if(!m_sBuf) return NULL; if(m_sBuf[0]==0) { unsigned char *t=m_sBuf; m_sBuf=single2wide((const char *)&t[1]); free(t); return ((const wchar_t *)&m_sBuf[1]); } return ((const wchar_t *)&m_sBuf[1]); } xml_string& operator =(xml_string& s) { set(s.c_str_w()); return *this; } xml_string& operator =(const char *s) { set(s); return *this; } xml_string& operator =(const wchar_t *s) { set(s); return *this; } private: unsigned char *wide2single(const wchar_t *s) { size_t len=wcslen(s); unsigned char *ns=allocsingle(len); char *t=((char *)&ns[1]); for(size_t i=0;i