00001 #ifndef INCLUDE_ORA_OID_H 00002 #define INCLUDE_ORA_OID_H 00003 00004 #include <string> 00005 00006 namespace ora { 00007 00008 class OId { 00009 00010 public: 00011 static bool isOId( const std::string& input ); 00012 00013 public: 00014 00015 OId(); 00016 00017 explicit OId( const std::pair<int,int>& oidPair ); 00018 00019 OId( int contId, int itemId ); 00020 00021 OId( const OId& rhs ); 00022 00023 OId& operator=( const OId& rhs ); 00024 00025 bool operator==( const OId& rhs ) const; 00026 00027 bool operator!=( const OId& rhs ) const; 00028 00029 int containerId() const; 00030 00031 int itemId() const; 00032 00033 bool fromString( const std::string& s ); 00034 00035 std::string toString() const; 00036 00037 void toOutputStream( std::ostream& os ) const; 00038 00039 void reset(); 00040 00041 bool isInvalid() const; 00042 00043 std::pair<int,int> toPair() const; 00044 00045 private: 00046 int m_containerId; 00047 int m_itemId; 00048 }; 00049 00050 class ITokenParser { 00051 public: 00052 virtual ~ITokenParser(){ 00053 } 00054 00055 virtual OId parse( const std::string& poolToken ) = 0; 00056 virtual std::string className( const std::string& poolToken ) = 0; 00057 }; 00058 00059 class ITokenWriter { 00060 public: 00061 virtual ~ITokenWriter(){ 00062 } 00063 00064 virtual std::string write( const OId& oid ) = 0; 00065 }; 00066 00067 } 00068 00069 inline std::ostream& operator << (std::ostream& os, const ora::OId& oid ){ 00070 oid.toOutputStream(os); 00071 return os; 00072 } 00073 00074 #endif 00075 00076