www.pudn.com > BTSERVER.rar > atom.h


//
// Copyright (C) 2003 Trevor Hogan
//

#ifndef ATOM_H
 #define ATOM_H

class CAtom
{
public:
	virtual ~CAtom( ) { }

	virtual bool isInt( )		{ return false; }
	virtual bool isLong( )		{ return false; }
	virtual bool isList( )		{ return false; }
	virtual bool isDicti( )		{ return false; }

	virtual int EncodedLength( ) = 0;
	virtual int Length( ) = 0;
	virtual string toString( ) = 0;
};

class CAtomInt : public CAtom
{
public:
	CAtomInt( );
	CAtomInt( int iInt );
	CAtomInt( const CAtomInt &c );
	virtual ~CAtomInt( );

	virtual bool isInt( )		{ return true; }

	virtual int EncodedLength( );
	virtual int Length( );
	virtual string toString( );

	int getValue( ) const;
	void setValue( int iInt );

private:
	int m_iInt;
};

class CAtomLong : public CAtom
{
public:
	CAtomLong( );
	CAtomLong( int64 iLong );
	CAtomLong( const CAtomLong &c );
	virtual ~CAtomLong( );

	virtual bool isLong( )		{ return true; }

	virtual int EncodedLength( );
	virtual int Length( );
	virtual string toString( );

	int64 getValue( ) const;
	void setValue( int64 iLong );

private:
	int64 m_iLong;
};

class CAtomString : public CAtom
{
public:
	CAtomString( );
	CAtomString( string strString );
	CAtomString( const CAtomString &c );
	virtual ~CAtomString( );

	virtual int EncodedLength( );
	virtual int Length( );
	virtual string toString( );

	string getValue( ) const;
	void setValue( string strString );

private:
	string m_strString;
};

class CAtomList : public CAtom
{
public:
	CAtomList( );
	CAtomList( vector vecList );
	CAtomList( const CAtomList &c );
	virtual ~CAtomList( );

	virtual bool isList( )		{ return true; }

	virtual int EncodedLength( );
	virtual int Length( );
	virtual string toString( );

	virtual bool isEmpty( );
	virtual void clear( );

	virtual void Randomize( );

	vector getValue( ) const;
	vector *getValuePtr( );
	void setValue( vector vecList );

	void delItem( CAtom *atmItem );
	void addItem( CAtom *atmItem );

private:
	vector m_vecList;
};

class CAtomDicti : public CAtom
{
public:
	CAtomDicti( );
	CAtomDicti( const CAtomDicti &c );
	virtual ~CAtomDicti( );

	virtual bool isDicti( )		{ return true; }

	virtual int EncodedLength( );
	virtual int Length( );
	virtual string toString( );

	virtual bool isEmpty( );
	virtual void clear( );

	map getValue( ) const;
	map *getValuePtr( );
	void setValue( map mapDicti );

	void delItem( string strKey );
	CAtom *getItem( string strKey );
	CAtom *getItem( string strKey, CAtom *pReturn );
	void setItem( string strKey, CAtom *pValue );

private:
	map m_mapDicti;
};

#endif