inlib  1.2.0
Public Member Functions | Protected Member Functions | Static Protected Member Functions | Protected Attributes
inlib::io::xwbuf Class Reference
Inheritance diagram for inlib::io::xwbuf:
Inheritance graph
[legend]
Collaboration diagram for inlib::io::xwbuf:
Collaboration graph
[legend]

List of all members.

Public Member Functions

virtual bool write (uchar a_x)
virtual bool write (char a_x)
virtual bool write (uint16 a_x)
virtual bool write (int16 a_x)
virtual bool write (uint32 a_x)
virtual bool write (int32 a_x)
virtual bool write (uint64 a_x)
virtual bool write (int64 a_x)
virtual bool write (float a_x)
virtual bool write (double a_x)
virtual bool write (bool a_v)
virtual bool write_cstr (const char *a_cstr)
virtual bool write_vec (uint32 a_n, const uchar *a_x)
virtual bool write_vec (uint32 a_n, const char *a_x)
virtual bool write_vec (uint32 a_n, const uint16 *a_x)
virtual bool write_vec (uint32 a_n, const int16 *a_x)
virtual bool write_vec (uint32 a_n, const uint32 *a_x)
virtual bool write_vec (uint32 a_n, const int32 *a_x)
virtual bool write_vec (uint32 a_n, const uint64 *a_x)
virtual bool write_vec (uint32 a_n, const int64 *a_x)
virtual bool write_vec (uint32 a_n, const float *a_x)
virtual bool write_vec (uint32 a_n, const double *a_x)
virtual bool write_vec (uint32 a_n, const bool *a_x)
virtual bool write_vec (const std::vector< std::string > &a_v)
virtual bool write_std_vec_vec (const std_vec_vec_uint_t &a_vv)
virtual bool write_std_vec_vec (const std_vec_vec_float_t &a_vv)
virtual bool write_std_vec_vec (const std_vec_vec_string_t &a_vv)
virtual const char * buf () const
virtual uint32 length () const
 xwbuf (std::ostream &a_out, uint32 a_size=1014)
virtual ~xwbuf ()
bool write_verbatim (const char *a_cstr)
void reset_pos ()

Protected Member Functions

 xwbuf (const xwbuf &a_from)
xwbufoperator= (const xwbuf &)
bool _write_cstr (const char *a_cstr)
bool _write_xml_cstr (const char *a_cstr)
template<class ta_type >
bool _write (ta_type a_v, const char *a_format)
template<class ta_type >
bool _write_array (uint32 a_n, const ta_type *a_a)
template<class T >
bool _write_std_vec_vec (const std::vector< std::vector< T > > &a_vv)
bool expand (uint32 a_new_size)

Static Protected Member Functions

static int MAX_SPRINTF_SIZE ()
static const std::string & write_format (uchar)
static const std::string & write_format (char)
static const std::string & write_format (uint16)
static const std::string & write_format (int16)
static const std::string & write_format (uint32)
static const std::string & write_format (int32)
static const std::string & write_format (uint64)
static const std::string & write_format (int64)
static const std::string & write_format (float)
static const std::string & write_format (double)

Protected Attributes

std::ostream & m_out
uint32 m_size
char * m_buffer
char * m_max
char * m_pos

Detailed Description

Definition at line 24 of file xwbuf.


Constructor & Destructor Documentation

inlib::io::xwbuf::xwbuf ( std::ostream &  a_out,
uint32  a_size = 1014 
) [inline]

Definition at line 196 of file xwbuf.

  :m_out(a_out)
  ,m_size(0)
  ,m_buffer(0)
  ,m_max(0)
  ,m_pos(0)
  {
#ifdef INLIB_MEM
    mem::increment(s_class().c_str());
#endif
    m_size = a_size;
    m_buffer = new char[m_size];
    m_max = m_buffer+m_size;
    m_pos = m_buffer;
  }
virtual inlib::io::xwbuf::~xwbuf ( ) [inline, virtual]

Definition at line 211 of file xwbuf.

                  {
    delete [] m_buffer;
#ifdef INLIB_MEM
    mem::decrement(s_class().c_str());
#endif
  }
inlib::io::xwbuf::xwbuf ( const xwbuf a_from) [inline, protected]

Definition at line 218 of file xwbuf.

  : iwbuf(a_from)
  ,m_out(a_from.m_out){
#ifdef INLIB_MEM
    mem::decrement(s_class().c_str());
#endif
  }

Member Function Documentation

template<class ta_type >
bool inlib::io::xwbuf::_write ( ta_type  a_v,
const char *  a_format 
) [inline, protected]

Definition at line 299 of file xwbuf.

                                                {
    if((m_pos+MAX_SPRINTF_SIZE())>m_max) {
      if(!expand(inlib::mx<uint32>(2*m_size,m_size+MAX_SPRINTF_SIZE())))
        return false;
    }
    if(!m_buffer) return false;
#ifdef WIN32
    int sz = _snprintf(m_pos,MAX_SPRINTF_SIZE(),a_format,a_v);
#else
    int sz = ::snprintf(m_pos,MAX_SPRINTF_SIZE(),a_format,a_v);
#endif
    if(sz>(MAX_SPRINTF_SIZE()-1)) return false;
    m_pos += sz;
    return true;
  }
template<class ta_type >
bool inlib::io::xwbuf::_write_array ( uint32  a_n,
const ta_type *  a_a 
) [inline, protected]

Definition at line 316 of file xwbuf.

                                                   {
    if(!_write_cstr("<array>")) return false;

    for(uint32 i=0;i<a_n;i++) {
      if(i) {if(!_write_cstr(" ")) return false;}
      if(!_write<ta_type>(a_a[i],write_format(a_a[i]).c_str())) return false;
    }

    if(!_write_cstr("</array>")) return false;
    return true;
  }
bool inlib::io::xwbuf::_write_cstr ( const char *  a_cstr) [inline, protected]

Definition at line 237 of file xwbuf.

                                       {
    size_t sz = ::strlen(a_cstr);
    if((m_pos+sz)>m_max)
      if(!expand(inlib::mx<uint32>(2*m_size,m_size+sz))) return false;
    if(!m_buffer) return false;
    ::memcpy(m_pos,a_cstr,sz);
    m_pos += sz;
    return true;
  }
template<class T >
bool inlib::io::xwbuf::_write_std_vec_vec ( const std::vector< std::vector< T > > &  a_vv) [inline, protected]

Definition at line 329 of file xwbuf.

                                                                 {
    // <num> <num> <num>\n<num> <num> <num>\n...\n<num> <num>
    if(!_write_cstr("<array>")) return false;

    typedef typename std::vector<T> vec_t;

    typedef typename std::vector<vec_t>::const_iterator cit_t;
    for(cit_t it=a_vv.begin();it!=a_vv.end();++it) {
      if(it!=a_vv.begin()) {if(!_write_cstr("\\n")) return false;}
      
      typedef typename std::vector<T>::const_iterator cit2_t;
      for(cit2_t it2=(*it).begin();it2!=(*it).end();++it2) {
        if(it2!=(*it).begin()) {if(!_write_cstr(" ")) return false;}
        if(!_write<T>(*it2,write_format(*it2).c_str())) return false;
      }

    }

    if(!_write_cstr("</array>")) return false;

    return true;
  }
bool inlib::io::xwbuf::_write_xml_cstr ( const char *  a_cstr) [inline, protected]

Definition at line 247 of file xwbuf.

                                           {
    size_t sz = ::strlen(a_cstr);
    if((m_pos+sz)>m_max)
      if(!expand(inlib::mx<uint32>(2*m_size,m_size+sz))) return false;
    if(!m_buffer) return false;

    char* pos = (char*)a_cstr;
    while(true){
      char c = *pos;pos++;
      if(c=='\0') {
        break;
      } else if(c=='<') {
        *m_pos = '&';m_pos++;
        *m_pos = 'l';m_pos++;
        *m_pos = 't';m_pos++;
        *m_pos = ';';m_pos++;
      } else if(c=='>') {
        *m_pos = '&';m_pos++;
        *m_pos = 'g';m_pos++;
        *m_pos = 't';m_pos++;
        *m_pos = ';';m_pos++;
      } else if(c=='&') {
        *m_pos = '&';m_pos++;
        *m_pos = 'a';m_pos++;
        *m_pos = 'm';m_pos++;
        *m_pos = 'p';m_pos++;
        *m_pos = ';';m_pos++;
      } else if(c=='"') {
        *m_pos = '&';m_pos++;
        *m_pos = 'q';m_pos++;
        *m_pos = 'u';m_pos++;
        *m_pos = 'o';m_pos++;
        *m_pos = 't';m_pos++;
        *m_pos = ';';m_pos++;
      } else if(c=='\'') {
        *m_pos = '&';m_pos++;
        *m_pos = 'a';m_pos++;
        *m_pos = 'p';m_pos++;
        *m_pos = 'o';m_pos++;
        *m_pos = 's';m_pos++;
        *m_pos = ';';m_pos++;
      } else {
        *m_pos = c;m_pos++;
      }
    }

    return true;
  }
virtual const char* inlib::io::xwbuf::buf ( ) const [inline, virtual]

Implements inlib::io::iwbuf.

Definition at line 193 of file xwbuf.

{return m_buffer;}
bool inlib::io::xwbuf::expand ( uint32  a_new_size) [inline, protected]

Definition at line 393 of file xwbuf.

                                 {
    unsigned long len = m_pos-m_buffer;
    if(!realloc<char>(m_buffer,a_new_size,m_size)) {
      m_out << "inlib::io::xwbuf::expand :"
            << " can't realloc " << a_new_size << " bytes."
            << std::endl;
      m_size = 0;
      m_max = 0;
      m_pos = 0;
      return false;
    }
    m_size = a_new_size;
    m_max = m_buffer + m_size;
    m_pos = m_buffer + len;
    return true;
  }
virtual uint32 inlib::io::xwbuf::length ( ) const [inline, virtual]

Implements inlib::io::iwbuf.

Definition at line 194 of file xwbuf.

{return m_pos-m_buffer;}
static int inlib::io::xwbuf::MAX_SPRINTF_SIZE ( ) [inline, static, protected]

Definition at line 296 of file xwbuf.

{return 256;}
xwbuf& inlib::io::xwbuf::operator= ( const xwbuf ) [inline, protected]

Definition at line 225 of file xwbuf.

{return *this;}
void inlib::io::xwbuf::reset_pos ( ) [inline]

Definition at line 231 of file xwbuf.

virtual bool inlib::io::xwbuf::write ( uchar  a_x) [inline, virtual]

Implements inlib::io::iwbuf.

Definition at line 32 of file xwbuf.

                                {
    if(!_write_cstr("<uchar v=\"")) return false;
    if(!_write<uchar>(a_x,write_format(a_x).c_str())) return false;
    if(!_write_cstr("\"/>")) return false;
    return true;
  }
virtual bool inlib::io::xwbuf::write ( char  a_x) [inline, virtual]

Implements inlib::io::iwbuf.

Definition at line 38 of file xwbuf.

                               {
    if(!_write_cstr("<char v=\"")) return false;
    if(!_write<char>(a_x,write_format(a_x).c_str())) return false;
    if(!_write_cstr("\"/>")) return false;
    return true;
  }
virtual bool inlib::io::xwbuf::write ( uint16  a_x) [inline, virtual]

Implements inlib::io::iwbuf.

Definition at line 44 of file xwbuf.

                                 {
    if(!_write_cstr("<uint16 v=\"")) return false;
    if(!_write<uint16>(a_x,write_format(a_x).c_str())) return false;
    if(!_write_cstr("\"/>")) return false;
    return true;
  }
virtual bool inlib::io::xwbuf::write ( int16  a_x) [inline, virtual]

Implements inlib::io::iwbuf.

Definition at line 50 of file xwbuf.

                                {
    if(!_write_cstr("<int16 v=\"")) return false;
    if(!_write<int16>(a_x,write_format(a_x).c_str())) return false;
    if(!_write_cstr("\"/>")) return false;
    return true;
  }
virtual bool inlib::io::xwbuf::write ( uint32  a_x) [inline, virtual]

Implements inlib::io::iwbuf.

Definition at line 56 of file xwbuf.

                                 {
    if(!_write_cstr("<uint32 v=\"")) return false;
    if(!_write<uint32>(a_x,write_format(a_x).c_str())) return false;
    if(!_write_cstr("\"/>")) return false;
    return true;
  }
virtual bool inlib::io::xwbuf::write ( int32  a_x) [inline, virtual]

Implements inlib::io::iwbuf.

Definition at line 62 of file xwbuf.

                                {
    if(!_write_cstr("<int32 v=\"")) return false;
    if(!_write<int32>(a_x,write_format(a_x).c_str())) return false;
    if(!_write_cstr("\"/>")) return false;
    return true;
  }
virtual bool inlib::io::xwbuf::write ( uint64  a_x) [inline, virtual]

Implements inlib::io::iwbuf.

Definition at line 68 of file xwbuf.

                                 {
    if(!_write_cstr("<uint64 v=\"")) return false;
    if(!_write<uint64>(a_x,write_format(a_x).c_str())) return false;
    if(!_write_cstr("\"/>")) return false;
    return true;
  }
virtual bool inlib::io::xwbuf::write ( int64  a_x) [inline, virtual]

Implements inlib::io::iwbuf.

Definition at line 74 of file xwbuf.

                                {
    if(!_write_cstr("<int64 v=\"")) return false;
    if(!_write<int64>(a_x,write_format(a_x).c_str())) return false;
    if(!_write_cstr("\"/>")) return false;
    return true;
  }
virtual bool inlib::io::xwbuf::write ( float  a_x) [inline, virtual]

Implements inlib::io::iwbuf.

Definition at line 80 of file xwbuf.

                                {
    if(!_write_cstr("<float v=\"")) return false;
    if(!_write<float>(a_x,write_format(a_x).c_str())) return false;
    if(!_write_cstr("\"/>")) return false;
    return true;
  }
virtual bool inlib::io::xwbuf::write ( double  a_x) [inline, virtual]

Implements inlib::io::iwbuf.

Definition at line 86 of file xwbuf.

                                 {
    if(!_write_cstr("<double v=\"")) return false;
    if(!_write<double>(a_x,write_format(a_x).c_str())) return false;
    if(!_write_cstr("\"/>")) return false;
    return true;
  }
virtual bool inlib::io::xwbuf::write ( bool  a_v) [inline, virtual]

Implements inlib::io::iwbuf.

Definition at line 93 of file xwbuf.

                               {
    if(!_write_cstr("<bool v=\"")) return false;
    if((m_pos+MAX_SPRINTF_SIZE())>m_max) {
      if(!expand(inlib::mx<uint32>(2*m_size,m_size+MAX_SPRINTF_SIZE()))) 
        return false;
    }
    if(!m_buffer) return false;
    //NOTE : the below writes an ending null char.
#ifdef WIN32
    int sz = _snprintf(m_pos,MAX_SPRINTF_SIZE(),"%u",a_v?1:0);
#else
    int sz = ::snprintf(m_pos,MAX_SPRINTF_SIZE(),"%u",a_v?1:0);
#endif
    if(sz>(MAX_SPRINTF_SIZE()-1)) return false;
    m_pos += sz;
    if(!_write_cstr("\"/>")) return false;
    return true;
  }
virtual bool inlib::io::xwbuf::write_cstr ( const char *  a_cstr) [inline, virtual]

Implements inlib::io::iwbuf.

Definition at line 112 of file xwbuf.

                                              {
    if(!_write_cstr("<string v=\"")) return false;
    if(!_write_xml_cstr(a_cstr)) return false;
    if(!_write_cstr("\"/>")) return false;
    return true;
  }
static const std::string& inlib::io::xwbuf::write_format ( uchar  ) [inline, static, protected]

Definition at line 352 of file xwbuf.

                                              {
    static const std::string s_v("%u");
    return s_v;    
  }
static const std::string& inlib::io::xwbuf::write_format ( char  ) [inline, static, protected]

Definition at line 356 of file xwbuf.

                                             {
    static const std::string s_v("%d");
    return s_v;    
  }
static const std::string& inlib::io::xwbuf::write_format ( uint16  ) [inline, static, protected]

Definition at line 360 of file xwbuf.

                                               {
    static const std::string s_v("%u");
    return s_v;    
  }
static const std::string& inlib::io::xwbuf::write_format ( int16  ) [inline, static, protected]

Definition at line 364 of file xwbuf.

                                              {
    static const std::string s_v("%d");
    return s_v;    
  }
static const std::string& inlib::io::xwbuf::write_format ( uint32  ) [inline, static, protected]

Definition at line 368 of file xwbuf.

                                               {
    static const std::string s_v("%u");
    return s_v;    
  }
static const std::string& inlib::io::xwbuf::write_format ( int32  ) [inline, static, protected]

Definition at line 372 of file xwbuf.

                                              {
    static const std::string s_v("%d");
    return s_v;    
  }
static const std::string& inlib::io::xwbuf::write_format ( uint64  ) [inline, static, protected]

Definition at line 376 of file xwbuf.

                                               {
    static const std::string s_v(uint64_format());
    return s_v;   
  }
static const std::string& inlib::io::xwbuf::write_format ( int64  ) [inline, static, protected]

Definition at line 380 of file xwbuf.

                                              {
    static const std::string s_v(int64_format());
    return s_v;   
  }
static const std::string& inlib::io::xwbuf::write_format ( float  ) [inline, static, protected]

Definition at line 384 of file xwbuf.

                                              {
    static const std::string s_v("%g");
    return s_v;    
  }
static const std::string& inlib::io::xwbuf::write_format ( double  ) [inline, static, protected]

Definition at line 388 of file xwbuf.

                                               {
    static const std::string s_v("%g");
    return s_v;    
  }
virtual bool inlib::io::xwbuf::write_std_vec_vec ( const std_vec_vec_uint_t a_vv) [inline, virtual]

Implements inlib::io::iwbuf.

Definition at line 165 of file xwbuf.

                                                                 {
    return _write_std_vec_vec<unsigned int>(a_vv);
  }
virtual bool inlib::io::xwbuf::write_std_vec_vec ( const std_vec_vec_float_t a_vv) [inline, virtual]

Implements inlib::io::iwbuf.

Definition at line 168 of file xwbuf.

                                                                  {
    return _write_std_vec_vec<float>(a_vv);
  }
virtual bool inlib::io::xwbuf::write_std_vec_vec ( const std_vec_vec_string_t a_vv) [inline, virtual]

Implements inlib::io::iwbuf.

Definition at line 171 of file xwbuf.

                                                                   {
    if(!_write_cstr("<array>")) return false;

    typedef std::vector<std::string> vec_t;

    std::vector<vec_t>::const_iterator it;
    for(it=a_vv.begin();it!=a_vv.end();++it) {
      if(it!=a_vv.begin()) {if(!_write_cstr("\\t")) return false;}
      
      std::vector<std::string>::const_iterator it2;
      for(it2=(*it).begin();it2!=(*it).end();++it2) {
        if(it2!=(*it).begin()) {if(!_write_cstr("\\n")) return false;}
        if(!_write_xml_cstr((*it2).c_str())) return false;
      }

    }

    if(!_write_cstr("</array>")) return false;

    return true;
  }
virtual bool inlib::io::xwbuf::write_vec ( uint32  a_n,
const uchar a_x 
) [inline, virtual]

Implements inlib::io::iwbuf.

Definition at line 119 of file xwbuf.

                                                     {
    return _write_array<uchar>(a_n,a_x);
  }
virtual bool inlib::io::xwbuf::write_vec ( uint32  a_n,
const char *  a_x 
) [inline, virtual]

Implements inlib::io::iwbuf.

Definition at line 122 of file xwbuf.

                                                    {
    return _write_array<char>(a_n,a_x);
  }
virtual bool inlib::io::xwbuf::write_vec ( uint32  a_n,
const uint16 a_x 
) [inline, virtual]

Implements inlib::io::iwbuf.

Definition at line 125 of file xwbuf.

                                                      {
    return _write_array<uint16>(a_n,a_x);
  }
virtual bool inlib::io::xwbuf::write_vec ( uint32  a_n,
const int16 a_x 
) [inline, virtual]

Implements inlib::io::iwbuf.

Definition at line 128 of file xwbuf.

                                                     {
    return _write_array<int16>(a_n,a_x);
  }
virtual bool inlib::io::xwbuf::write_vec ( uint32  a_n,
const uint32 a_x 
) [inline, virtual]

Implements inlib::io::iwbuf.

Definition at line 131 of file xwbuf.

                                                      {
    return _write_array<uint32>(a_n,a_x);
  }
virtual bool inlib::io::xwbuf::write_vec ( uint32  a_n,
const int32 a_x 
) [inline, virtual]

Implements inlib::io::iwbuf.

Definition at line 134 of file xwbuf.

                                                     {
    return _write_array<int32>(a_n,a_x);
  }
virtual bool inlib::io::xwbuf::write_vec ( uint32  a_n,
const uint64 a_x 
) [inline, virtual]

Implements inlib::io::iwbuf.

Definition at line 137 of file xwbuf.

                                                      {
    return _write_array<uint64>(a_n,a_x);
  }
virtual bool inlib::io::xwbuf::write_vec ( uint32  a_n,
const int64 a_x 
) [inline, virtual]

Implements inlib::io::iwbuf.

Definition at line 140 of file xwbuf.

                                                     {
    return _write_array<int64>(a_n,a_x);
  }
virtual bool inlib::io::xwbuf::write_vec ( uint32  a_n,
const float *  a_x 
) [inline, virtual]

Implements inlib::io::iwbuf.

Definition at line 143 of file xwbuf.

                                                     {
    return _write_array<float>(a_n,a_x);
  }
virtual bool inlib::io::xwbuf::write_vec ( uint32  a_n,
const double *  a_x 
) [inline, virtual]

Implements inlib::io::iwbuf.

Definition at line 146 of file xwbuf.

                                                      {
    return _write_array<double>(a_n,a_x);
  }
virtual bool inlib::io::xwbuf::write_vec ( uint32  a_n,
const bool *  a_x 
) [inline, virtual]

Implements inlib::io::iwbuf.

Definition at line 149 of file xwbuf.

                                                    {
    return _write_array<bool>(a_n,a_x);
  }
virtual bool inlib::io::xwbuf::write_vec ( const std::vector< std::string > &  a_v) [inline, virtual]

Implements inlib::io::iwbuf.

Definition at line 153 of file xwbuf.

                                                         {
    // <string>\n<string>\n<string>
    if(!_write_cstr("<array>")) return false;
    std::vector<std::string>::const_iterator it;    
    for(it=a_v.begin();it!=a_v.end();++it) {
      if(it!=a_v.begin()) {if(!_write_cstr("\\n")) return false;}
      if(!_write_xml_cstr((*it).c_str())) return false;
    }
    if(!_write_cstr("</array>")) return false;
    return true;
  }
bool inlib::io::xwbuf::write_verbatim ( const char *  a_cstr) [inline]

Definition at line 227 of file xwbuf.

                                          {
    if(!_write_cstr(a_cstr)) return false;
    return true;
  }

Member Data Documentation

char* inlib::io::xwbuf::m_buffer [protected]

Definition at line 412 of file xwbuf.

char* inlib::io::xwbuf::m_max [protected]

Definition at line 413 of file xwbuf.

std::ostream& inlib::io::xwbuf::m_out [protected]

Definition at line 410 of file xwbuf.

char* inlib::io::xwbuf::m_pos [protected]

Definition at line 414 of file xwbuf.

Definition at line 411 of file xwbuf.


The documentation for this class was generated from the following file:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines