string EncodeList( const CAtomList &x ) { vector<CAtom *> v = x.getValue( ); string strDest; strDest += "l"; for( vector<CAtom *> :: iterator i = v.begin( ); i != v.end( ); i++ ) { if( dynamic_cast<CAtomInt *>( *i ) ) strDest += EncodeInt( *dynamic_cast<CAtomInt *>( *i ) ); else if( dynamic_cast<CAtomLong *>( *i ) ) strDest += EncodeLong( *dynamic_cast<CAtomLong *>( *i ) ); else if( dynamic_cast<CAtomString *>( *i ) ) strDest += EncodeString( *dynamic_cast<CAtomString *>( *i ) ); else if( dynamic_cast<CAtomList *>( *i ) ) strDest += EncodeList( *dynamic_cast<CAtomList *>( *i ) ); else if( dynamic_cast<CAtomDicti *>( *i ) ) strDest += EncodeDicti( *dynamic_cast<CAtomDicti *>( *i ) ); } strDest += "e"; return strDest; }
string EncodeDicti( const CAtomDicti &x ) { map<string, CAtom *> mapDicti = x.getValue( ); string strDest; strDest += "d"; for( map<string, CAtom *> :: iterator i = mapDicti.begin( ); i != mapDicti.end( ); i++ ) { strDest += EncodeString( CAtomString( (*i).first ) ); if( dynamic_cast<CAtomInt *>( (*i).second ) ) strDest += EncodeInt( *dynamic_cast<CAtomInt *>( (*i).second ) ); else if( dynamic_cast<CAtomLong *>( (*i).second ) ) strDest += EncodeLong( *dynamic_cast<CAtomLong *>( (*i).second ) ); else if( dynamic_cast<CAtomString *>( (*i).second ) ) strDest += EncodeString( *dynamic_cast<CAtomString *>( (*i).second ) ); else if( dynamic_cast<CAtomList *>( (*i).second ) ) strDest += EncodeList( *dynamic_cast<CAtomList *>( (*i).second ) ); else if( dynamic_cast<CAtomDicti *>( (*i).second ) ) strDest += EncodeDicti( *dynamic_cast<CAtomDicti *>( (*i).second ) ); } strDest += "e"; return strDest; }
string Encode( CAtom *pAtom ) { if( dynamic_cast<CAtomInt *>( pAtom ) ) return EncodeInt( *dynamic_cast<CAtomInt *>( pAtom ) ); else if( dynamic_cast<CAtomLong *>( pAtom ) ) return EncodeLong( *dynamic_cast<CAtomLong *>( pAtom ) ); else if( dynamic_cast<CAtomString *>( pAtom ) ) return EncodeString( *dynamic_cast<CAtomString *>( pAtom ) ); else if( dynamic_cast<CAtomList *>( pAtom ) ) return EncodeList( *dynamic_cast<CAtomList *>( pAtom ) ); else if( dynamic_cast<CAtomDicti *>( pAtom ) ) return EncodeDicti( *dynamic_cast<CAtomDicti *>( pAtom ) ); return string( ); }
BOOL BEEncoder::EncodeObject(LPBEOBJECT pObject) { switch (pObject->GetType()) { case BEObject::BET_DICT: return EncodeDict(static_cast<LPDICTIONARY>(pObject)); break; case BEObject::BET_LIST: return EncodeList(static_cast<LPLIST>(pObject)); break; case BEObject::BET_INTEGER: return EncodeInt(static_cast<LPINTEGER>(pObject)); break; case BEObject::BET_STRING: return EncodeString(static_cast<LPSTRING>(pObject)); break; } return FALSE; }