00001 #include "XmlStyleStream.h"
00002
00003 namespace Sct{
00004
00005 XmlStyleOStream::XmlStyleOStream(std::ostream& out) : m_out(out) {}
00006
00007 XmlStyleOStream::~XmlStyleOStream(){}
00008
00009
00010 static std::string escape[] = { "&", "'", """, ">", "<" };
00011 static std::string entity[] = { "&" , "'", "\"", ">", "<" };
00012
00013 static std::string invalidate( const char * val, int length )
00014 {
00015 std::string text( val, length );
00016 for ( int i = 0; i < 5; i++ )
00017 {
00018 std::string::size_type pos = 0;
00019 while( ( pos = text.find( escape[i] ) ) != std::string::npos )
00020 {
00021 text.replace( pos, escape[i].length(), entity[i] );
00022 }
00023 }
00024 return text;
00025 }
00026
00027 static std::string validate( const char * val, int length )
00028 {
00029 std::string text( val, length );
00030 for ( int i = 0; i < 5; i++ )
00031 {
00032 std::string::size_type pos = 0;
00033 while( ( pos = text.find( entity[i], pos ) ) != std::string::npos )
00034 {
00035 text.replace( pos++, entity[i].length(), escape[i] );
00036 }
00037 }
00038 return text;
00039 }
00040
00041 XmlStyleOStream& XmlStyleOStream::operator<< ( bool v )
00042 {
00043 m_out << "<a t=\"bool\">" << v << "</a>" << std::endl;
00044 return *this;
00045 }
00046
00047 XmlStyleOStream& XmlStyleOStream::operator<< ( char v )
00048 {
00049 m_out << "<a t=\"s8\">" << static_cast<short>( v ) << "</a>" << std::endl;
00050 return *this;
00051 }
00052
00053 XmlStyleOStream& XmlStyleOStream::operator<< ( unsigned char v )
00054 {
00055 m_out << "<a t=\"u8\">" << static_cast<short>( static_cast<char>( v ) ) << "</a>" << std::endl;
00056 return *this;
00057 }
00058
00059 XmlStyleOStream& XmlStyleOStream::operator<< ( short v )
00060 {
00061 m_out << "<a t=\"s16\">" << v << "</a>" << std::endl;
00062 return *this;
00063 }
00064
00065 XmlStyleOStream& XmlStyleOStream::operator<< ( unsigned short v )
00066 {
00067 m_out << "<a t=\"u16\">" << static_cast<short>( v ) << "</a>" << std::endl;
00068 return *this;
00069 }
00070
00071 XmlStyleOStream& XmlStyleOStream::operator<< ( int v )
00072 {
00073 m_out << "<a t=\"s32\">" << v << "</a>" << std::endl;
00074 return *this;
00075 }
00076
00077 XmlStyleOStream& XmlStyleOStream::operator<< ( unsigned int v )
00078 {
00079 m_out << "<a t=\"u32\">" << static_cast<int>( v ) << "</a>" << std::endl;
00080 return *this;
00081 }
00082
00083 XmlStyleOStream& XmlStyleOStream::operator<< ( long v )
00084 {
00085 m_out << "<a t=\"s32\">" << v << "</a>" << std::endl;
00086 return *this;
00087 }
00088
00089 XmlStyleOStream& XmlStyleOStream::operator<< ( unsigned long v )
00090 {
00091 m_out << "<a t=\"u32\">" << static_cast<long>( v ) << "</a>" << std::endl;
00092 return *this;
00093 }
00094
00095 XmlStyleOStream& XmlStyleOStream::operator<< ( float v )
00096 {
00097 m_out << "<a t=\"float\">" << v << "</a>" << std::endl;
00098 return *this;
00099 }
00100
00101 XmlStyleOStream& XmlStyleOStream::operator<< ( double v )
00102 {
00103 m_out << "<a t=\"double\">" << v << "</a>" << std::endl;
00104 return *this;
00105 }
00106
00107 XmlStyleOStream& XmlStyleOStream::operator<< ( const char * v )
00108 {
00109 const char * val = ( v == 0 ? "" : v );
00110 m_out << "<a t=\"string\">" << validate( val, strlen( val ) ) << "</a>" << std::endl;
00111 return *this;
00112 }
00113
00114 XmlStyleOStream& XmlStyleOStream::operator<< ( const unsigned char * v )
00115 {
00116 return ( (*this) << reinterpret_cast<const char *>(v) );
00117 }
00118
00119 XmlStyleOStream& XmlStyleOStream::operator<< ( const std::string & v )
00120 {
00121 return ( (*this) << v.c_str() );
00122 }
00123
00124
00125
00126
00127
00128
00129 XmlStyleOStream& XmlStyleOStream::put( const bool * p, size_t size )
00130 {
00131 m_out << "<a t=\"bool\" s=\"" << size << "\">";
00132 for ( size_t i = 0; i < size; i++ )
00133 {
00134 m_out << p[i] << " ";
00135 }
00136 m_out << "</a>" << std::endl;
00137 return *this;
00138 }
00139
00140 XmlStyleOStream& XmlStyleOStream::put( const char * p, size_t size )
00141 {
00142 m_out << "<a t=\"s8\" s=\"" << size << "\">";
00143 for ( size_t i = 0; i < size; i++ )
00144 {
00145 m_out << static_cast<const short>( p[i] ) << " ";
00146 }
00147 m_out << "</a>" << std::endl;
00148 return *this;
00149 }
00150
00151 XmlStyleOStream& XmlStyleOStream::put( const unsigned char * p, size_t size )
00152 {
00153 m_out << "<a t=\"u8\" s=\"" << size << "\">";
00154 for ( size_t i = 0; i < size; i++ )
00155 {
00156 m_out << static_cast<const short>( static_cast<const char>( p[i] ) ) << " ";
00157 }
00158 m_out << "</a>" << std::endl;
00159 return *this;
00160 }
00161
00162 XmlStyleOStream& XmlStyleOStream::put( const short * p, size_t size )
00163 {
00164 m_out << "<a t=\"s16\" s=\"" << size << "\">";
00165 for ( size_t i = 0; i < size; i++ )
00166 {
00167 m_out << p[i] << " ";
00168 }
00169 m_out << "</a>" << std::endl;
00170 return *this;
00171 }
00172
00173 XmlStyleOStream& XmlStyleOStream::put( const unsigned short * p, size_t size )
00174 {
00175 m_out << "<a t=\"u16\" s=\"" << size << "\">";
00176 for ( size_t i = 0; i < size; i++ )
00177 {
00178 m_out << static_cast<const short>( p[i] ) << " ";
00179 }
00180 m_out << "</a>" << std::endl;
00181 return *this;
00182 }
00183
00184 XmlStyleOStream& XmlStyleOStream::put( const int * p, size_t size )
00185 {
00186 m_out << "<a t=\"s32\" s=\"" << size << "\">";
00187 for ( size_t i = 0; i < size; i++ )
00188 {
00189 m_out << p[i] << " ";
00190 }
00191 m_out << "</a>" << std::endl;
00192 return *this;
00193 }
00194
00195 XmlStyleOStream& XmlStyleOStream::put( const unsigned int * p, size_t size )
00196 {
00197 m_out << "<a t=\"u32\" s=\"" << size << "\">";
00198 for ( size_t i = 0; i < size; i++ )
00199 {
00200 m_out << static_cast<const int>( p[i] ) << " ";
00201 }
00202 m_out << "</a>" << std::endl;
00203 return *this;
00204 }
00205
00206 XmlStyleOStream& XmlStyleOStream::put( const long * p, size_t size )
00207 {
00208 m_out << "<a t=\"s32\" s=\"" << size << "\">";
00209 for ( size_t i = 0; i < size; i++ )
00210 {
00211 m_out << p[i] << " ";
00212 }
00213 m_out << "</a>" << std::endl;
00214 return *this;
00215 }
00216
00217 XmlStyleOStream& XmlStyleOStream::put( const unsigned long * p, size_t size )
00218 {
00219 m_out << "<a t=\"u32\" s=\"" << size << "\">";
00220 for ( size_t i = 0; i < size; i++ )
00221 {
00222 m_out << static_cast<const long>( p[i] ) << " ";
00223 }
00224 m_out << "</a>" << std::endl;
00225 return *this;
00226 }
00227
00228 XmlStyleOStream& XmlStyleOStream::put( const float * p, size_t size )
00229 {
00230 m_out << "<a t=\"float\" s=\"" << size << "\">";
00231 for ( size_t i = 0; i < size; i++ )
00232 {
00233 m_out << p[i] << " ";
00234 }
00235 m_out << "</a>" << std::endl;
00236 return *this;
00237 }
00238
00239 XmlStyleOStream& XmlStyleOStream::put( const double * p, size_t size )
00240 {
00241 m_out << "<a t=\"double\" s=\"" << size << "\">";
00242 for ( size_t i = 0; i < size; i++ )
00243 {
00244 m_out << p[i] << " ";
00245 }
00246 m_out << "</a>" << std::endl;
00247 return *this;
00248 }
00249
00250 XmlStyleOStream& XmlStyleOStream::put( const std::string * p, size_t size )
00251 {
00252 m_out << "<a t=\"string\" s=\"" << size << "\">";
00253 for ( size_t i = 0; i < size; i++ )
00254 {
00255 m_out << "\"" << validate( p[i].c_str(), p[i].length() ) << "\" ";
00256 }
00257 m_out << "</a>" << std::endl;
00258 return *this;
00259 }
00260
00261
00262
00263
00264
00265 XmlStyleIStream::~XmlStyleIStream(){}
00266
00267
00268 XmlStyleIStream::XmlStyleIStream(std::istream& is)
00269 : count_( 0 ),
00270 entries_ ( 0 )
00271 {
00272 std::ostringstream os;
00273 std::string tmp;
00274 while (is.good()){
00275 is >> tmp;
00276 os << tmp+" ";
00277 }
00278
00279 data_=os.str();
00280
00281 std::string::size_type pos = 0;
00282 while ( ( pos = data_.find("<a t=", pos) ) != std::string::npos )
00283 {
00284 pos++;
00285 entries_++;
00286 }
00287 entries_--;
00288 }
00289
00290 XmlStyleIStream& XmlStyleIStream::operator>>( char * v )
00291 {
00292 std::string::size_type start;
00293
00294 start = data_.find("<a t=", count_);
00295 start = data_.find(">", start);
00296 start++;
00297 count_ = data_.find("</a>", start);
00298
00299 std::string str = invalidate( data_.data() + start, count_ - start );
00300 strcpy( v, str.c_str() );
00301
00302 return *this;
00303 }
00304
00305 XmlStyleIStream& XmlStyleIStream::operator>>( unsigned char * v )
00306 {
00307 return ( *this >> reinterpret_cast<char*>( v ));
00308 }
00309
00310 XmlStyleIStream& XmlStyleIStream::operator>>( char ** v )
00311 {
00312 std::string::size_type start;
00313
00314 start = data_.find("<a t=", count_);
00315 start = data_.find(">", start);
00316 start++;
00317 count_ = data_.find("</a>", start);
00318
00319 std::string str = invalidate( data_.data() + start, count_ - start );
00320 (*v) = new char[str.length() + 1];
00321 strcpy( (*v), str.c_str() );
00322
00323 return *this;
00324 }
00325
00326 XmlStyleIStream& XmlStyleIStream::operator>>( unsigned char ** v )
00327 {
00328 return ( *this >> reinterpret_cast<char**>( v ) );
00329 }
00330
00331 XmlStyleIStream& XmlStyleIStream::operator>>(bool& v)
00332 {
00333 std::string::size_type start;
00334
00335 start = data_.find("<a t=", count_);
00336 start = data_.find(">", start);
00337 start++;
00338 count_ = data_.find("</a>", start);
00339
00340 std::istringstream sin( data_.substr( start, count_ - start ) );
00341 sin >> v;
00342
00343 return *this;
00344 }
00345
00346 XmlStyleIStream& XmlStyleIStream::operator>>(char& v)
00347 {
00348 std::string::size_type start;
00349
00350 start = data_.find("<a t=", count_);
00351 start = data_.find(">", start);
00352 start++;
00353 count_ = data_.find("</a>", start);
00354
00355 std::istringstream sin( data_.substr( start, count_ - start ) );
00356 short s;
00357 sin >> s;
00358 v = s;
00359
00360 return *this;
00361 }
00362
00363 XmlStyleIStream& XmlStyleIStream::operator>>(unsigned char& v)
00364 {
00365 std::string::size_type start;
00366
00367 start = data_.find("<a t=", count_);
00368 start = data_.find(">", start);
00369 start++;
00370 count_ = data_.find("</a>", start);
00371
00372 std::istringstream sin( data_.substr( start, count_ - start ) );
00373 unsigned short s;
00374 sin >> s;
00375 v = s;
00376
00377 return *this;
00378 }
00379
00380 XmlStyleIStream& XmlStyleIStream::operator>>(int& v)
00381 {
00382 std::string::size_type start;
00383
00384 start = data_.find("<a t=", count_);
00385 start = data_.find(">", start);
00386 start++;
00387 count_ = data_.find("</a>", start);
00388
00389 std::istringstream sin( data_.substr( start, count_ - start ) );
00390 sin >> v;
00391 return *this;
00392 }
00393
00394 XmlStyleIStream& XmlStyleIStream::operator>>(long& v)
00395 {
00396 std::string::size_type start;
00397
00398 start = data_.find("<a t=", count_);
00399 start = data_.find(">", start);
00400 start++;
00401 count_ = data_.find("</a>", start);
00402
00403 std::istringstream sin( data_.substr( start, count_ - start ) );
00404 sin >> v;
00405
00406 return *this;
00407 }
00408
00409 XmlStyleIStream& XmlStyleIStream::operator>>(short& v)
00410 {
00411 std::string::size_type start;
00412
00413 start = data_.find("<a t=", count_);
00414 start = data_.find(">", start);
00415 start++;
00416 count_ = data_.find("</a>", start);
00417
00418 std::istringstream sin( data_.substr( start, count_ - start ) );
00419 sin >> v;
00420
00421 return *this;
00422 }
00423
00424 XmlStyleIStream& XmlStyleIStream::operator>>(unsigned int& v)
00425 {
00426 std::string::size_type start;
00427
00428 start = data_.find("<a t=", count_);
00429 start = data_.find(">", start);
00430 start++;
00431 count_ = data_.find("</a>", start);
00432
00433 std::istringstream sin( data_.substr( start, count_ - start ) );
00434 sin >> v;
00435
00436 return *this;
00437 }
00438
00439 XmlStyleIStream& XmlStyleIStream::operator>>(unsigned long& v)
00440 {
00441 std::string::size_type start;
00442
00443 start = data_.find("<a t=", count_);
00444 start = data_.find(">", start);
00445 start++;
00446 count_ = data_.find("</a>", start);
00447
00448 std::istringstream sin( data_.substr( start, count_ - start ) );
00449 sin >> v;
00450
00451 return *this;
00452 }
00453
00454 XmlStyleIStream& XmlStyleIStream::operator>>(unsigned short& v)
00455 {
00456 std::string::size_type start;
00457
00458 start = data_.find("<a t=", count_);
00459 start = data_.find(">", start);
00460 start++;
00461 count_ = data_.find("</a>", start);
00462
00463 std::istringstream sin( data_.substr( start, count_ - start ) );
00464 sin >> v;
00465
00466 return *this;
00467 }
00468
00469 XmlStyleIStream& XmlStyleIStream::operator>>(float& v)
00470 {
00471 std::string::size_type start;
00472
00473 start = data_.find("<a t=", count_);
00474 start = data_.find(">", start);
00475 start++;
00476 count_ = data_.find("</a>", start);
00477
00478 std::istringstream sin( data_.substr( start, count_ - start ) );
00479 sin >> v;
00480
00481 return *this;
00482 }
00483
00484 XmlStyleIStream& XmlStyleIStream::operator>>(double& v)
00485 {
00486 std::string::size_type start;
00487
00488 start = data_.find("<a t=", count_);
00489 start = data_.find(">", start);
00490 start++;
00491 count_ = data_.find("</a>", start);
00492
00493 std::istringstream sin( data_.substr( start, count_ - start ) );
00494 sin >> v;
00495
00496 return *this;
00497 }
00498
00499 XmlStyleIStream& XmlStyleIStream::operator>>(std::string & v)
00500 {
00501 char * str;
00502 (*this) >> &str;
00503 v = str;
00504 delete[] str;
00505 return *this;
00506 }
00507
00508
00509
00510
00511
00512 void XmlStyleIStream::reset( )
00513 {
00514 count_ = 0;
00515 }
00516
00517 size_t XmlStyleIStream::entries( ) const
00518 {
00519 return entries_;
00520 }
00521
00522 size_t XmlStyleIStream::readSize( ) const
00523 {
00524 std::string::size_type start, end;
00525
00526 start = data_.find("<a t=", count_);
00527 end = data_.find(">", start);
00528 start = data_.find(" s=\"", start);
00529 if ( start == std::string::npos || start > end )
00530 {
00531 return 1;
00532 }
00533 start += 4;
00534 end = data_.find("\"", start);
00535
00536 std::istringstream sin( data_.substr( start, end - start ) );
00537
00538 size_t size;
00539 sin >> size;
00540 return size;
00541 }
00542
00543 bool XmlStyleIStream::isArray( ) const
00544 {
00545 std::string::size_type start, end;
00546
00547 start = data_.find("<a t=", count_);
00548 end = data_.find(">", start);
00549 start = data_.find(" s=\"", start);
00550 if ( start == std::string::npos || start > end )
00551 {
00552 return false;
00553 }
00554 else
00555 {
00556 return true;
00557 }
00558 }
00559
00560
00561
00562
00563
00564
00565 XmlStyleIStream& XmlStyleIStream::get( bool ** v, size_t & size )
00566 {
00567 size = readSize();
00568
00569 std::string::size_type start;
00570
00571 start = data_.find("\">", count_) + 2;
00572 count_ = data_.find("</a>", start);
00573
00574 std::istringstream sin( data_.substr( start, count_ - start ) );
00575 *v = new bool[size];
00576 for ( size_t i = 0; i < size; i++ )
00577 {
00578 sin >> (*v)[i];
00579 }
00580
00581 return *this;
00582 }
00583
00584 XmlStyleIStream& XmlStyleIStream::get( char ** v, size_t & size )
00585 {
00586 size = readSize();
00587
00588 std::string::size_type start;
00589
00590 start = data_.find("\">", count_) + 2;
00591 count_ = data_.find("</a>", start);
00592
00593 std::istringstream sin( data_.substr( start, count_ - start ) );
00594 *v = new char[size];
00595 for ( size_t i = 0; i < size; i++ )
00596 {
00597 short s;
00598 sin >> s;
00599 (*v)[i] = static_cast<char>( s );
00600 }
00601
00602 return *this;
00603 }
00604
00605 XmlStyleIStream& XmlStyleIStream::get( unsigned char ** v, size_t & size )
00606 {
00607 size = readSize();
00608
00609 std::string::size_type start;
00610
00611 start = data_.find("\">", count_) + 2;
00612 count_ = data_.find("</a>", start);
00613
00614 std::istringstream sin( data_.substr( start, count_ - start ) );
00615 *v = new unsigned char[size];
00616 for ( size_t i = 0; i < size; i++ )
00617 {
00618 short s;
00619 sin >> s;
00620 (*v)[i] = static_cast<unsigned char>( s );
00621 }
00622 return *this;
00623 }
00624
00625 XmlStyleIStream& XmlStyleIStream::get( short ** v, size_t & size )
00626 {
00627 size = readSize();
00628
00629 std::string::size_type start;
00630
00631 start = data_.find("\">", count_) + 2;
00632 count_ = data_.find("</a>", start);
00633
00634 std::istringstream sin( data_.substr( start, count_ - start ) );
00635 *v = new short[size];
00636 for ( size_t i = 0; i < size; i++ )
00637 {
00638 sin >> (*v)[i];
00639 }
00640 return *this;
00641 }
00642 XmlStyleIStream& XmlStyleIStream::get( unsigned short ** v, size_t & size )
00643 {
00644 size = readSize();
00645
00646 std::string::size_type start;
00647
00648 start = data_.find("\">", count_) + 2;
00649 count_ = data_.find("</a>", start);
00650
00651 std::istringstream sin( data_.substr( start, count_ - start ) );
00652 *v = new unsigned short[size];
00653 for ( size_t i = 0; i < size; i++ )
00654 {
00655 sin >> (*v)[i];
00656 }
00657 return *this;
00658 }
00659 XmlStyleIStream& XmlStyleIStream::get( int ** v, size_t & size )
00660 {
00661 size = readSize();
00662
00663 std::string::size_type start;
00664
00665 start = data_.find("\">", count_) + 2;
00666 count_ = data_.find("</a>", start);
00667
00668 std::istringstream sin( data_.substr( start, count_ - start ) );
00669 *v = new int[size];
00670 for ( size_t i = 0; i < size; i++ )
00671 {
00672 sin >> (*v)[i];
00673 }
00674 return *this;
00675 }
00676 XmlStyleIStream& XmlStyleIStream::get( unsigned int ** v, size_t & size )
00677 {
00678 size = readSize();
00679
00680 std::string::size_type start;
00681
00682 start = data_.find("\">", count_) + 2;
00683 count_ = data_.find("</a>", start);
00684
00685 std::istringstream sin( data_.substr( start, count_ - start ) );
00686 *v = new unsigned int[size];
00687 for ( size_t i = 0; i < size; i++ )
00688 {
00689 sin >> (*v)[i];
00690 }
00691 return *this;
00692 }
00693 XmlStyleIStream& XmlStyleIStream::get( long ** v, size_t & size )
00694 {
00695 size = readSize();
00696
00697 std::string::size_type start;
00698
00699 start = data_.find("\">", count_) + 2;
00700 count_ = data_.find("</a>", start);
00701
00702 std::istringstream sin( data_.substr( start, count_ - start ) );
00703 *v = new long[size];
00704 for ( size_t i = 0; i < size; i++ )
00705 {
00706 sin >> (*v)[i];
00707 }
00708 return *this;
00709 }
00710 XmlStyleIStream& XmlStyleIStream::get( unsigned long ** v, size_t & size )
00711 {
00712 size = readSize();
00713
00714 std::string::size_type start;
00715
00716 start = data_.find("\">", count_) + 2;
00717 count_ = data_.find("</a>", start);
00718
00719 std::istringstream sin( data_.substr( start, count_ - start ) );
00720 *v = new unsigned long[size];
00721 for ( size_t i = 0; i < size; i++ )
00722 {
00723 sin >> (*v)[i];
00724 }
00725 return *this;
00726 }
00727 XmlStyleIStream& XmlStyleIStream::get( float ** v, size_t & size )
00728 {
00729 size = readSize();
00730
00731 std::string::size_type start;
00732
00733 start = data_.find("\">", count_) + 2;
00734 count_ = data_.find("</a>", start);
00735
00736 std::istringstream sin( data_.substr( start, count_ - start ) );
00737 *v = new float[size];
00738 for ( size_t i = 0; i < size; i++ )
00739 {
00740 sin >> (*v)[i];
00741 }
00742 return *this;
00743 }
00744 XmlStyleIStream& XmlStyleIStream::get( double ** v, size_t & size )
00745 {
00746 size = readSize();
00747
00748 std::string::size_type start;
00749
00750 start = data_.find("\">", count_) + 2;
00751 count_ = data_.find("</a>", start);
00752
00753 std::istringstream sin( data_.substr( start, count_ - start ) );
00754 *v = new double[size];
00755 for ( size_t i = 0; i < size; i++ )
00756 {
00757 sin >> (*v)[i];
00758 }
00759 return *this;
00760 }
00761
00762 XmlStyleIStream& XmlStyleIStream::get( std::string ** v, size_t & size )
00763 {
00764 size = readSize();
00765
00766 std::string::size_type start, end;
00767
00768 start = data_.find("\">", count_) + 2;
00769 count_ = data_.find("</a>", start);
00770
00771 *v = new std::string[size];
00772 for ( size_t i = 0; i < size; i++ )
00773 {
00774 start = data_.find("\"", start) + 1;
00775 end = data_.find("\"", start);
00776 (*v)[i] = invalidate( data_.c_str() + start, end - start );
00777 start = end + 2;
00778 }
00779 return *this;
00780 }
00781
00782
00783
00784
00785
00786
00787 XmlStyleIStream& XmlStyleIStream::get( bool * const v, const size_t size )
00788 {
00789 size_t n;
00790 bool * buff;
00791
00792 get( &buff, n );
00793 size_t min = ( n < size ? n : size );
00794 memcpy( v, buff, min * sizeof(bool) );
00795 delete[] buff;
00796
00797 return *this;
00798 }
00799
00800 XmlStyleIStream& XmlStyleIStream::get( char * const v, const size_t size )
00801 {
00802 size_t n;
00803 char * buff;
00804
00805 get( &buff, n );
00806 size_t min = ( n < size ? n : size );
00807 memcpy( v, buff, min * sizeof(char) );
00808 delete[] buff;
00809
00810 return *this;
00811 }
00812
00813 XmlStyleIStream& XmlStyleIStream::get(unsigned char * const v, const size_t size )
00814 {
00815 size_t n;
00816 unsigned char * buff;
00817
00818 get( &buff, n );
00819 size_t min = ( n < size ? n : size );
00820 memcpy( v, buff, min * sizeof(unsigned char) );
00821 delete[] buff;
00822
00823 return *this;
00824 }
00825
00826 XmlStyleIStream& XmlStyleIStream::get( short * const v, const size_t size )
00827 {
00828 size_t n;
00829 short * buff;
00830
00831 get( &buff, n );
00832 size_t min = ( n < size ? n : size );
00833 memcpy( v, buff, min * sizeof(short) );
00834 delete[] buff;
00835
00836 return *this;
00837 }
00838 XmlStyleIStream& XmlStyleIStream::get( unsigned short * const v, const size_t size )
00839 {
00840 size_t n;
00841 unsigned short * buff;
00842
00843 get( &buff, n );
00844 size_t min = ( n < size ? n : size );
00845 memcpy( v, buff, min * sizeof(unsigned short) );
00846 delete[] buff;
00847
00848 return *this;
00849 }
00850
00851 XmlStyleIStream& XmlStyleIStream::get( int * const v, const size_t size )
00852 {
00853 size_t n;
00854 int * buff;
00855
00856 get( &buff, n );
00857 size_t min = ( n < size ? n : size );
00858 memcpy( v, buff, min * sizeof(int) );
00859 delete[] buff;
00860
00861 return *this;
00862 }
00863
00864 XmlStyleIStream& XmlStyleIStream::get( unsigned int * const v, const size_t size )
00865 {
00866 size_t n;
00867 unsigned int * buff;
00868
00869 get( &buff, n );
00870 size_t min = ( n < size ? n : size );
00871 memcpy( v, buff, min * sizeof(unsigned int) );
00872 delete[] buff;
00873
00874 return *this;
00875 }
00876
00877 XmlStyleIStream& XmlStyleIStream::get( long * const v, const size_t size )
00878 {
00879 size_t n;
00880 long * buff;
00881
00882 get( &buff, n );
00883 size_t min = ( n < size ? n : size );
00884 memcpy( v, buff, min * sizeof(long) );
00885 delete[] buff;
00886
00887 return *this;
00888 }
00889
00890 XmlStyleIStream& XmlStyleIStream::get( unsigned long * const v, const size_t size )
00891 {
00892 size_t n;
00893 unsigned long * buff;
00894
00895 get( &buff, n );
00896 size_t min = ( n < size ? n : size );
00897 memcpy( v, buff, min * sizeof(unsigned long) );
00898 delete[] buff;
00899
00900 return *this;
00901 }
00902
00903 XmlStyleIStream& XmlStyleIStream::get( float * const v, const size_t size )
00904 {
00905 size_t n;
00906 float * buff;
00907
00908 get( &buff, n );
00909 size_t min = ( n < size ? n : size );
00910 memcpy( v, buff, min * sizeof(float) );
00911 delete[] buff;
00912
00913 return *this;
00914 }
00915
00916 XmlStyleIStream& XmlStyleIStream::get( double * const v, const size_t size )
00917 {
00918 size_t n;
00919 double * buff;
00920
00921 get( &buff, n );
00922 size_t min = ( n < size ? n : size );
00923 memcpy( v, buff, min * sizeof(double) );
00924 delete[] buff;
00925
00926 return *this;
00927 }
00928
00929 XmlStyleIStream& XmlStyleIStream::get( std::string * const v, const size_t size )
00930 {
00931 size_t n;
00932 std::string * buff;
00933 get( &buff, n );
00934
00935 size_t min = ( n < size ? n : size );
00936
00937 for( size_t i = 0; i < min; i++ )
00938 {
00939 v[i] = buff[i];
00940 }
00941
00942 delete[] buff;
00943 return *this;
00944 }
00945
00946 }