1 /* -*-c++-*- 2 * 3 * Copyright (C) 2006-2007 Mathias Froehlich 4 * 5 * This program is free software; you can redistribute it and/or 6 * modify it under the terms of the GNU General Public License as 7 * published by the Free Software Foundation; either version 2 of the 8 * License, or (at your option) any later version. 9 * 10 * This program is distributed in the hope that it will be useful, but 11 * WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 * General Public License for more details. 14 * 15 * You should have received a copy of the GNU General Public License 16 * along with this program; if not, write to the Free Software 17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 18 * MA 02110-1301, USA. 19 * 20 */ 21 22 #ifndef SG_VERTEX_ARRAY_BIN_HXX 23 #define SG_VERTEX_ARRAY_BIN_HXX 24 25 #include <vector> 26 #include <map> 27 28 template<typename T> 29 class SGVertexArrayBin { 30 public: 31 typedef T value_type; 32 typedef typename value_type::less less; 33 typedef std::vector<value_type> ValueVector; 34 typedef typename ValueVector::size_type index_type; 35 typedef std::map<value_type, index_type, less> ValueMap; 36 insert(const value_type & t)37 index_type insert(const value_type& t) 38 { 39 typename ValueMap::iterator i = _valueMap.find(t); 40 if (i != _valueMap.end()) 41 return i->second; 42 43 index_type index = _values.size(); 44 _valueMap[t] = index; 45 _values.push_back(t); 46 return index; 47 } 48 getVertex(index_type index) const49 const value_type& getVertex(index_type index) const 50 { return _values[index]; } 51 getNumVertices() const52 index_type getNumVertices() const 53 { return _values.size(); } 54 empty() const55 bool empty() const 56 { return _values.empty(); } 57 58 private: 59 ValueVector _values; 60 ValueMap _valueMap; 61 }; 62 63 #endif 64