00001 //================================================================================================= 00002 // Copyright (c) 2011, Stefan Kohlbrecher, TU Darmstadt 00003 // All rights reserved. 00004 00005 // Redistribution and use in source and binary forms, with or without 00006 // modification, are permitted provided that the following conditions are met: 00007 // * Redistributions of source code must retain the above copyright 00008 // notice, this list of conditions and the following disclaimer. 00009 // * Redistributions in binary form must reproduce the above copyright 00010 // notice, this list of conditions and the following disclaimer in the 00011 // documentation and/or other materials provided with the distribution. 00012 // * Neither the name of the Simulation, Systems Optimization and Robotics 00013 // group, TU Darmstadt nor the names of its contributors may be used to 00014 // endorse or promote products derived from this software without 00015 // specific prior written permission. 00016 00017 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 00018 // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 00019 // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 00020 // DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY 00021 // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 00022 // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 00023 // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 00024 // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 00025 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 00026 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00027 //================================================================================================= 00028 00029 #ifndef __DataPointContainer_h_ 00030 #define __DataPointContainer_h_ 00031 00032 #include <vector> 00033 00034 namespace hectorslam { 00035 00036 template<typename DataPointType> 00037 class DataPointContainer 00038 { 00039 public: 00040 00041 DataPointContainer(int size = 1000) 00042 { 00043 dataPoints.reserve(size); 00044 } 00045 00046 void setFrom(const DataPointContainer& other, float factor) 00047 { 00048 origo = other.getOrigo()*factor; 00049 00050 dataPoints = other.dataPoints; 00051 00052 unsigned int size = dataPoints.size(); 00053 00054 for (unsigned int i = 0; i < size; ++i){ 00055 dataPoints[i] *= factor; 00056 } 00057 00058 } 00059 00060 void add(const DataPointType& dataPoint) 00061 { 00062 dataPoints.push_back(dataPoint); 00063 } 00064 00065 void clear() 00066 { 00067 dataPoints.clear(); 00068 } 00069 00070 int getSize() const 00071 { 00072 return dataPoints.size(); 00073 } 00074 00075 const DataPointType& getVecEntry(int index) const 00076 { 00077 return dataPoints[index]; 00078 } 00079 00080 DataPointType getOrigo() const 00081 { 00082 return origo; 00083 } 00084 00085 void setOrigo(const DataPointType& origoIn) 00086 { 00087 origo = origoIn; 00088 } 00089 00090 protected: 00091 00092 std::vector<DataPointType> dataPoints; 00093 DataPointType origo; 00094 }; 00095 00096 typedef DataPointContainer<Eigen::Vector2f> DataContainer; 00097 00098 } 00099 00100 #endif