00001
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef _DATA_H
00030 #define _DATA_H
00031
00032 #include "typedefs.h"
00033 #include "attributeiter.h"
00034 #include "attvalueiter.h"
00035 #include <string>
00036 #include <map>
00037 #include <set>
00038
00039 namespace libgexf {
00040
00041 class AttributeIter;
00042 class AttValueIter;
00043
00047 class Data {
00048 public:
00049 Data();
00050
00054 Data(const Data& orig);
00055
00056 virtual ~Data();
00057
00058
00064 std::string getNodeLabel(const libgexf::t_id node_id) const;
00065
00071 bool hasNodeLabel(const libgexf::t_id node_id) const;
00072
00079 void setNodeLabel(const libgexf::t_id node_id, const std::string& label);
00080
00081
00087 std::string getEdgeLabel(const libgexf::t_id edge_id) const;
00088
00094 bool hasEdgeLabel(const libgexf::t_id edge_id) const;
00095
00102 void setEdgeLabel(const libgexf::t_id edge_id, const std::string& label);
00103
00104
00112 void addNodeAttributeColumn(const libgexf::t_id id, const std::string& title, const std::string& type="STRING");
00113
00121 void addEdgeAttributeColumn(const libgexf::t_id id, const std::string& title, const std::string& type="STRING");
00122
00123
00130 void setNodeAttributeDefault(const libgexf::t_id attr_id, const std::string& default_value);
00131
00138 void setEdgeAttributeDefault(const libgexf::t_id attr_id, const std::string& default_value);
00139
00140
00147 void setNodeAttributeOptions(const libgexf::t_id attr_id, const std::string& options);
00148
00155 void setEdgeAttributeOptions(const libgexf::t_id attr_id, const std::string& options);
00156
00157
00165 void setNodeValue(const libgexf::t_id node_id, const libgexf::t_id attr_id, const std::string& value);
00166
00174 void setEdgeValue(const libgexf::t_id edge_id, const libgexf::t_id attr_id, const std::string& value);
00175
00176
00182 libgexf::AttributeIter* getNodeAttributeColumn() const;
00183
00189 libgexf::AttributeIter* getEdgeAttributeColumn() const;
00190
00191
00199 std::string getNodeAttribute(const libgexf::t_id node_id, const libgexf::t_id attr_id) const;
00200
00208 std::string getEdgeAttribute(const libgexf::t_id edge_id, const libgexf::t_id attr_id) const;
00209
00210
00217 libgexf::AttValueIter* getNodeAttributeRow(const libgexf::t_id node_id) const;
00218
00225 libgexf::AttValueIter* getEdgeAttributeRow(const libgexf::t_id edge_id) const;
00226
00227
00234 std::string getNodeAttributeDefault(const libgexf::t_id attr_id) const;
00235
00236
00243 std::string getEdgeAttributeOptions(const libgexf::t_id attr_id) const;
00244
00251 std::string getNodeAttributeOptions(const libgexf::t_id attr_id) const;
00252
00259 std::string getEdgeAttributeDefault(const libgexf::t_id attr_id) const;
00260
00261
00268 bool hasNodeAttributeDefault(const libgexf::t_id attr_id) const;
00269
00276 bool hasEdgeAttributeDefault(const libgexf::t_id attr_id) const;
00277
00278
00285 bool hasNodeAttributeOptions(const libgexf::t_id attr_id) const;
00286
00293 bool hasEdgeAttributeOptions(const libgexf::t_id attr_id) const;
00294
00295
00303 bool isNodeAttributeOption(const libgexf::t_id attr_id, const std::string& option) const;
00304
00312 bool isEdgeAttributeOption(const libgexf::t_id attr_id, const std::string& option) const;
00313
00314
00315
00316 void removeNodeAttributeColumn(const libgexf::t_id attr_id);
00317
00318
00319 void removeEdgeAttributeColumn(const libgexf::t_id attr_id);
00320
00326 void clearNodeAttributes(const libgexf::t_id node_id);
00327
00333 void clearEdgeAttributes(const libgexf::t_id edge_id);
00334
00339 void clear();
00340
00345 void clearEdgesAttributes();
00346 private:
00347 std::map<t_id,std::string > _node_labels;
00348 std::map<t_id,std::string > _edge_labels;
00350 std::map<t_id,std::string > _node_attributes;
00351 std::map<t_id,t_attr_type > _node_attributes_types;
00352 std::map<t_id,std::string > _node_default_values;
00353 std::map<t_id,std::map<std::string,unsigned short int > > _node_options;
00354 std::map<t_id,std::string > _node_verbatim_options;
00355 std::map<t_id,std::map<t_id,std::string > > _node_values;
00357 std::map<t_id,std::string > _edge_attributes;
00358 std::map<t_id,t_attr_type > _edge_attributes_types;
00359 std::map<t_id,std::string > _edge_default_values;
00360 std::map<t_id,std::map<std::string,unsigned short int > > _edge_options;
00361 std::map<t_id,std::string > _edge_verbatim_options;
00362 std::map<t_id,std::map<t_id,std::string > > _edge_values;
00363 private:
00364 void init();
00365 friend std::ostream& operator<<(std::ostream& os, const Data& o);
00366 unsigned int countNodeAttributeColumn() const;
00367 unsigned int countEdgeAttributeColumn() const;
00368 friend class AttributeIter;
00369 friend class AttValueIter;
00370 };
00371
00372 }
00373
00374 #endif
00375