00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef SG_VERTEX_ARRAY_BIN_HXX
00023 #define SG_VERTEX_ARRAY_BIN_HXX
00024
00025 #include <vector>
00026 #include <map>
00027
00028 template<typename T>
00029 class SGVertexArrayBin {
00030 public:
00031 typedef T value_type;
00032 typedef typename value_type::less less;
00033 typedef std::vector<value_type> ValueVector;
00034 typedef typename ValueVector::size_type index_type;
00035 typedef std::map<value_type, index_type, less> ValueMap;
00036
00037 index_type insert(const value_type& t)
00038 {
00039 typename ValueMap::iterator i = _valueMap.find(t);
00040 if (i != _valueMap.end())
00041 return i->second;
00042
00043 index_type index = _values.size();
00044 _valueMap[t] = index;
00045 _values.push_back(t);
00046 return index;
00047 }
00048
00049 const value_type& getVertex(index_type index) const
00050 { return _values[index]; }
00051
00052 index_type getNumVertices() const
00053 { return _values.size(); }
00054
00055 bool empty() const
00056 { return _values.empty(); }
00057
00058 private:
00059 ValueVector _values;
00060 ValueMap _valueMap;
00061 };
00062
00063 #endif