Changeset 361 for trunk

Show
Ignore:
Timestamp:
12/30/06 12:27:46 (17 years ago)
Author:
wagi
Message:

serializing interface extended. write and read except a 'string' as argument

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/libfreebob/src/bebob/bebob_serialize.cpp

    r359 r361  
    9292} 
    9393 
     94bool 
     95BeBoB::XMLSerialize::write( const char* pMemberName, 
     96                            Glib::ustring str) 
     97{ 
     98    vector<string> tokens; 
     99    string memberName( pMemberName ); 
     100    tokenize( memberName, tokens, "/" ); 
     101 
     102    if ( tokens.size() == 0 ) { 
     103        return false; 
     104    } 
     105 
     106    xmlpp::Node* pNode = m_doc.get_root_node(); 
     107    pNode = getNodePath( pNode, tokens ); 
     108 
     109    // element to be added 
     110    xmlpp::Element* pElem = pNode->add_child( tokens[tokens.size() - 1] ); 
     111    pElem->set_child_text( str ); 
     112 
     113    return true; 
     114} 
    94115 
    95116xmlpp::Node* 
     
    177198} 
    178199 
     200bool 
     201BeBoB::XMLDeserialize::read( const char* pMemberName, 
     202                             Glib::ustring& str ) 
     203{ 
     204    xmlpp::Node* pNode = m_parser.get_document()->get_root_node(); 
     205 
     206    xmlpp::NodeSet nodeSet = pNode->find( pMemberName ); 
     207    for ( xmlpp::NodeSet::iterator it = nodeSet.begin(); 
     208          it != nodeSet.end(); 
     209          ++it ) 
     210    { 
     211        const xmlpp::Element* pElement = dynamic_cast< const xmlpp::Element* >( *it ); 
     212        if ( pElement && pElement->has_child_text() ) { 
     213            str = pElement->get_child_text()->get_content(); 
     214            return true; 
     215        } 
     216        return false; 
     217    } 
     218 
     219    return false; 
     220} 
  • trunk/libfreebob/src/bebob/bebob_serialize.h

    r359 r361  
    3434        virtual bool write( const char* pMemberName, 
    3535                            long long value ) = 0; 
     36        virtual bool write( const char* pMemberName, 
     37                            Glib::ustring str) = 0; 
    3638 
    3739        template <typename T>  bool write( const char* pMemberName, T value ); 
     
    4547        virtual bool read( const char* pMemberName, 
    4648                           long long& value ) = 0; 
     49        virtual bool read( const char* pMemberName, 
     50                           Glib::ustring& str ) = 0; 
    4751 
    4852        template <typename T> bool read( const char* pMemberName, T& value ); 
     
    5660        virtual bool write( const char* pMemberName, 
    5761                            long long value ); 
     62        virtual bool write( const char* pMemberName, 
     63                            Glib::ustring str); 
    5864    private: 
    5965        Glib::ustring    m_filepath; 
     
    7076        virtual bool read( const char* pMemberName, 
    7177                           long long& value ); 
     78        virtual bool read( const char* pMemberName, 
     79                           Glib::ustring& str ); 
    7280    private: 
    7381        Glib::ustring    m_filepath; 
  • trunk/libfreebob/src/bebob/bebob_unittests.cpp

    r359 r361  
    319319} 
    320320 
     321/////////////////////////////////////// 
     322 
     323class U3_SerializeMe { 
     324public: 
     325    U3_SerializeMe(); 
     326    ~U3_SerializeMe(); 
     327 
     328    bool operator == ( const U3_SerializeMe& rhs ); 
     329 
     330    bool serialize( IOSerialize& ser ); 
     331    bool deserialize( IODeserialize& deser ); 
     332 
     333    const char* m_pString; 
     334}; 
     335 
     336U3_SerializeMe::U3_SerializeMe() 
     337    : m_pString( 0 ) 
     338{ 
     339} 
     340 
     341 
     342U3_SerializeMe::~U3_SerializeMe() 
     343{ 
     344    delete m_pString; 
     345} 
     346//-------------------------- 
     347 
     348bool 
     349U3_SerializeMe::operator == ( const U3_SerializeMe& rhs ) 
     350{ 
     351    return strcmp( m_pString, rhs.m_pString ) == 0; 
     352} 
     353 
     354bool 
     355U3_SerializeMe::serialize( IOSerialize& ser ) 
     356{ 
     357    bool result; 
     358    result  = ser.write( "m_pString", Glib::ustring( m_pString ) ); 
     359    return result; 
     360} 
     361 
     362bool 
     363U3_SerializeMe::deserialize( IODeserialize& deser ) 
     364{ 
     365    bool result; 
     366    Glib::ustring str; 
     367    result  = deser.read( "m_pString", str ); 
     368 
     369    m_pString = strdup( str.c_str() ); 
     370 
     371    return result; 
     372} 
     373 
     374static bool 
     375testU3() 
     376{ 
     377    U3_SerializeMe sme1; 
     378    sme1.m_pString = strdup( "fancy string" ); 
     379 
     380    { 
     381        XMLSerialize xmlSerialize( "unittest_u3.xml" ); 
     382        if ( !sme1.serialize( xmlSerialize ) ) { 
     383            printf( "(serializing failed)" ); 
     384            return false; 
     385        } 
     386    } 
     387 
     388    U3_SerializeMe sme2; 
     389 
     390    { 
     391        XMLDeserialize xmlDeserialize( "unittest_u3.xml" ); 
     392        if ( !sme2.deserialize( xmlDeserialize ) ) { 
     393            printf( "(deserializing failed)" ); 
     394            return false; 
     395        } 
     396    } 
     397 
     398    bool result = sme1 == sme2; 
     399    if ( !result ) { 
     400        printf( "(wrong values)" ); 
     401    } 
     402 
     403    return result; 
     404} 
     405 
    321406///////////////////////////////////// 
    322407///////////////////////////////////// 
     
    334419    { "serialize 1",  testU1 }, 
    335420    { "serialize 2",  testU2 }, 
     421    { "serialize 3",  testU3 }, 
    336422}; 
    337423