00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00041 #ifndef _VECTORSTORE_H
00042 #define _VECTORSTORE_H
00043
00044 #include <list>
00045 #include <map>
00046 #include <functional>
00047
00048 #include <vstoreitem.h>
00049 #include <gvector.h>
00050 #include <gvectortypes.h>
00051 #include <filewriter.h>
00052
00053 namespace GVectors {
00054
00070 class VectorStore {
00071 private:
00082 std::map<gvid_t, vsi_ptr_t> lookup;
00091 std::list<vsi_ptr_t> vector_items;
00103 std::list<gvid_t> removed;
00104
00114 bool useexceptions;
00115
00116 protected:
00118 vsi_ptr_t get_item(gvid_t id) const;
00119
00120 public:
00122 VectorStore(bool use_e=true);
00124 ~VectorStore();
00125
00127 void use_exceptions(bool ue);
00130 vv_ptr_t id_get(gvid_t id);
00133 vv_ptr_t operator[](gvid_t id) { return id_get(id); }
00134
00136 gvid_t add(const vv_ref_t v);
00138 gvid_t add(vv_ptr_t v, bool managed=true);
00139
00142 void replace(gvid_t id, vv_ptr_t v, bool managed=true);
00145 void replace(gvid_t id, vv_ref_t v);
00146
00148 gvid_t add_child(gvid_t id, const vv_ref_t v);
00150 gvid_t add_child(gvid_t id, vv_ptr_t v, bool managed=true);
00151
00153 void remove(gvid_t id);
00155 void clear();
00157 vssize_t size() const;
00158
00160 void set_origin(const Coordinates& co);
00162 void set_scale(double sc);
00164 void set_arrow_length(double arl);
00166 void set_rotation(const Rotation& r);
00168 void draw(Drawer &d);
00170 void save(FileWriter& fw) const;
00171
00174 void sum_up(gvid_t id, GVector& vec) const;
00177 void dimension(Coordinates& min, Coordinates& max) const;
00178 };
00179
00180 }
00181
00182 #endif