GridMapCacheArray.h
Go to the documentation of this file.
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 __GridMapCacheArray_h_
00030 #define __GridMapCacheArray_h_
00031 
00032 #include <Eigen/Core>
00033 
00034 class CachedMapElement
00035 {
00036 public:
00037   float val;
00038   int index;
00039 };
00040 
00044 class GridMapCacheArray
00045 {
00046 public:
00047 
00051   GridMapCacheArray()
00052     : cacheArray(0)
00053     , arrayDimensions(-1,-1)
00054   {
00055     currCacheIndex = 0;
00056   }
00057 
00061   ~GridMapCacheArray()
00062   {
00063     deleteCacheArray();
00064   }
00065 
00069   void resetCache()
00070   {
00071     currCacheIndex++;
00072   }
00073 
00080   bool containsCachedData(int index, float& val)
00081   {
00082     const CachedMapElement& elem (cacheArray[index]);
00083 
00084     if (elem.index == currCacheIndex) {
00085       val = elem.val;
00086       return true;
00087     } else {
00088       return false;
00089     }
00090   }
00091 
00097   void cacheData(int index, float val)
00098   {
00099     CachedMapElement& elem (cacheArray[index]);
00100     elem.index = currCacheIndex;
00101     elem.val = val;
00102   }
00103 
00108   void setMapSize(const Eigen::Vector2i& newDimensions)
00109   {
00110     setArraySize(newDimensions);
00111   }
00112 
00113 protected:
00114 
00119   void createCacheArray(const Eigen::Vector2i& newDimensions)
00120   {
00121     arrayDimensions = newDimensions;
00122 
00123     int sizeX = arrayDimensions[0];
00124     int sizeY = arrayDimensions[1];
00125 
00126     int size = sizeX * sizeY;
00127 
00128     cacheArray = new CachedMapElement [size];
00129 
00130     for (int x = 0; x < size; ++x) {
00131       cacheArray[x].index = -1;
00132     }
00133   }
00134 
00138   void deleteCacheArray()
00139   {
00140     delete[] cacheArray;
00141   }
00142 
00146   void setArraySize(const Eigen::Vector2i& newDimensions)
00147   {
00148     if (this->arrayDimensions != newDimensions) {
00149       if (cacheArray != 0) {
00150         deleteCacheArray();
00151         cacheArray = 0;
00152       }
00153       createCacheArray(newDimensions);
00154     }
00155   }
00156 
00157 protected:
00158 
00159   CachedMapElement* cacheArray;    
00160   int currCacheIndex;              
00161 
00162   Eigen::Vector2i arrayDimensions; 
00163 
00164 };
00165 
00166 
00167 #endif


hector_mapping
Author(s): Stefan Kohlbrecher
autogenerated on Mon Oct 6 2014 00:33:51