GEOS 3.2.1
|
00001 /********************************************************************** 00002 * $Id: CoordinateList.h 2619 2009-08-12 19:01:57Z pramsey $ 00003 * 00004 * GEOS - Geometry Engine Open Source 00005 * http://geos.refractions.net 00006 * 00007 * Copyright (C) 2006 Refractions Research Inc. 00008 * 00009 * This is free software; you can redistribute and/or modify it under 00010 * the terms of the GNU Lesser General Public Licence as published 00011 * by the Free Software Foundation. 00012 * See the COPYING file for more information. 00013 * 00014 **********************************************************************/ 00015 00016 #ifndef GEOS_GEOM_COORDINATELIST_H 00017 #define GEOS_GEOM_COORDINATELIST_H 00018 00019 #include <geos/export.h> 00020 #include <geos/geom/Coordinate.h> 00021 00022 #include <list> 00023 #include <ostream> // for operator<< 00024 #include <memory> // for auto_ptr 00025 00026 // Forward declarations 00027 namespace geos { 00028 namespace geom { 00029 //class Coordinate; 00030 } 00031 } 00032 00033 00034 namespace geos { 00035 namespace geom { // geos::geom 00036 00045 class GEOS_DLL CoordinateList { 00046 00047 public: 00048 00049 typedef std::list<Coordinate>::iterator iterator; 00050 typedef std::list<Coordinate>::const_iterator const_iterator; 00051 typedef std::list<Coordinate>::size_type size_type; 00052 00053 friend std::ostream& operator<< (std::ostream& os, 00054 const CoordinateList& cl); 00055 00056 CoordinateList(const std::vector<Coordinate>& v) 00057 : 00058 coords(v.begin(), v.end()) 00059 { 00060 } 00061 00062 CoordinateList() 00063 : 00064 coords() 00065 { 00066 } 00067 00068 size_type size() const 00069 { 00070 return coords.size(); 00071 } 00072 00073 iterator begin() 00074 { 00075 return coords.begin(); 00076 } 00077 00078 iterator end() 00079 { 00080 return coords.end(); 00081 } 00082 00083 const_iterator begin() const 00084 { 00085 return coords.begin(); 00086 } 00087 00088 const_iterator end() const 00089 { 00090 return coords.end(); 00091 } 00092 00093 iterator insert(iterator pos, const Coordinate& c) 00094 { 00095 return coords.insert(pos, c); 00096 } 00097 00098 iterator erase(iterator pos) 00099 { 00100 return coords.erase(pos); 00101 } 00102 00103 iterator erase(iterator first, iterator last) 00104 { 00105 return coords.erase(first, last); 00106 } 00107 00108 std::auto_ptr<Coordinate::Vect> toCoordinateArray() const 00109 { 00110 std::auto_ptr<Coordinate::Vect> ret(new Coordinate::Vect); 00111 ret->assign(coords.begin(), coords.end()); 00112 return ret; 00113 } 00114 00115 private: 00116 00117 std::list<Coordinate> coords; 00118 00119 00120 }; 00121 00122 inline 00123 std::ostream& operator<< (std::ostream& os, const CoordinateList& cl) 00124 { 00125 os << "("; 00126 for (CoordinateList::const_iterator 00127 it=cl.begin(), end=cl.end(); 00128 it != end; 00129 ++it) 00130 { 00131 const Coordinate& c = *it; 00132 if ( it != cl.begin() ) os << ", "; 00133 os << c; 00134 } 00135 os << ")"; 00136 00137 return os; 00138 } 00139 00140 } // namespace geos::geom 00141 } // namespace geos 00142 00143 00144 #endif // ndef GEOS_GEOM_COORDINATELIST_H 00145 00146 /********************************************************************** 00147 * $Log$ 00148 * Revision 1.2 2006/07/21 17:05:22 strk 00149 * added operator<< for CoordinateList class 00150 * 00151 * Revision 1.1 2006/07/21 14:53:12 strk 00152 * CoordinateList class re-introduced, for list-based ops 00153 * (not strictly mapped to JTS version, not yet at least) 00154 * 00155 **********************************************************************/