00001 #ifndef TAGCOLL_TAG_H
00002 #define TAGCOLL_TAG_H
00003
00004 #pragma interface
00005
00006 #include <string>
00007
00008 namespace Tagcoll
00009 {
00010
00011 class Facet;
00012 class FacetImpl;
00013 class TagImpl;
00014 class TagSet;
00015 class FacetSet;
00016
00035 class Tag
00036 {
00037 protected:
00038 TagImpl* impl;
00039
00040 Tag(FacetImpl* facet, const std::string& name) throw ();
00041
00042 public:
00043 Tag() throw ();
00044 Tag(const Tag& f) throw ();
00045 ~Tag() throw ();
00046 Tag& operator=(const Tag& f) throw ();
00047
00048 bool operator==(const Tag& f) const throw ();
00049 bool operator<(const Tag& f) const throw ();
00050
00051 operator bool() const throw ();
00052
00053 Facet facet() const throw ();
00054
00055 const std::string& name() const throw ();
00056 std::string fullname() const throw ();
00057
00058 const std::string& sdesc() const throw ();
00059 const std::string& ldesc() const throw ();
00060 const std::string& fulldata() const throw ();
00061
00062 void sdesc(const std::string& desc) throw ();
00063 void ldesc(const std::string& desc) throw ();
00064 void fulldata(const std::string& desc) throw ();
00065
00066 friend class FacetImpl;
00067 friend class TagSet;
00068 };
00069
00070 class Facet
00071 {
00072 protected:
00073 FacetImpl* impl;
00074
00075 Facet(FacetImpl* impl) throw ();
00076
00077 public:
00078 explicit Facet(const std::string& name) throw ();
00079 Facet() throw ();
00080 Facet(const Facet& f) throw ();
00081 ~Facet() throw ();
00082 Facet& operator=(const Facet& f) throw ();
00083
00084 bool operator==(const Facet& f) const throw ();
00085 bool operator<(const Facet& f) const throw ();
00086
00087 operator bool() const throw ();
00088
00089 const std::string& name() const throw ();
00090
00091 const std::string& sdesc() const throw ();
00092 const std::string& ldesc() const throw ();
00093 const std::string& fulldata() const throw ();
00094
00095 void sdesc(const std::string& desc) throw ();
00096 void ldesc(const std::string& desc) throw ();
00097 void fulldata(const std::string& desc) throw ();
00098
00099 Tag obtainTag(const std::string& name) throw ();
00100
00101 bool hasTag(const std::string& name) const throw ();
00102 Tag getTag(const std::string& name) const throw ();
00103 const TagSet& tags() const throw ();
00104
00105 friend class Tag;
00106 friend class FacetSet;
00107 };
00108
00109 };
00110
00111
00112 #endif