INTRODUCTION
Overview
Download and Install
Quick Start
Documentation
Publications

NONFRAMEWORK CODE
Driver Interfaces
Drivers
Libraries
Utilities

FRAMEWORK CODE
Interfaces
Components
Libraries
Utilities

Full Software Listings

DEVELOPER
Tutorials
Examples
Dev Guide
Dashboard

PEOPLE
Contributors
Users

SourceForge.net Logo
Project
Download
Mailing lists

 

         

typemap.h

00001 /*
00002  * Orca-Robotics Project: Components for robotics 
00003  *               http://orca-robotics.sf.net/
00004  * Copyright (c) 2004-2009 Alex Brooks, Alexei Makarenko, Tobias Kaupp
00005  *
00006  * This copy of Orca is licensed to you under the terms described in
00007  * the LICENSE file included in this distribution.
00008  *
00009  */
00010 #ifndef ORCA2_TYPEMAP_H
00011 #define ORCA2_TYPEMAP_H
00012 
00013 #include <vector>
00014 #include "cell2d.h"
00015 
00016 namespace hydropathplan
00017 {
00020     template<typename Type>
00021     class TypeMap
00022     {
00023 
00024     public:
00025         TypeMap( unsigned int szx=0, unsigned int sz=0 );
00026         ~TypeMap() {};
00027 
00029         unsigned int sizeX() const { return sizeX_; };
00030 
00032         unsigned int sizeY() const { return sizeY_; };
00033 
00035         void resize( unsigned int szx, unsigned int szy );
00036 
00038         void fill( Type val );
00039     
00041         bool isInGrid( int x, int y ) const { return (x >= 0 && x < (int)sizeX_ && y >= 0 && y < (int)sizeY_ ); };
00042 
00044         bool isInGrid( Cell2D & cell ) const { return isInGrid( cell.x(), cell.y() ); };
00045         
00047         bool tryElement( int x, int y, Type & val ) const;
00048 
00050         bool tryElement( Cell2D c, Type & val ) const { return tryElement(c.x(),c.y(),val); };
00051         
00053         void setElement( int x, int y, Type val );
00054 
00056         void setElement( Cell2D c, Type val ) { setElement(c.x(),c.y(),val); };
00057         
00058             
00059     private:
00060         unsigned int sizeX_;
00061         unsigned int sizeY_;
00062         std::vector< std::vector< Type > > data_;
00063         
00064     };
00065 
00066     // ======================================================================
00067 
00068     // Special kinds of 'TypeMap's
00069 
00070     typedef TypeMap<float> FloatMap;
00071     typedef TypeMap<int> IntMap;
00072     
00073     // =========== ELEMENT ACCESS (without specializing templated TypeMap) =========
00074     
00076     float element( const FloatMap &floatMap, int x, int y );      
00077     
00079     inline float element( const FloatMap &floatMap,  Cell2D c )
00080     {
00081         return element( floatMap, c.x(), c.y() );
00082     }
00083 
00084     // ======================================================================
00085     
00086     template<typename Type>
00087     TypeMap<Type>::TypeMap( unsigned int szx, unsigned int szy )
00088         : sizeX_( 0 ), sizeY_( 0 )
00089     {
00090         resize( szx, szy );
00091     }
00092     
00093     template<typename Type>
00094     void 
00095     TypeMap<Type>::resize( unsigned int szx, unsigned int szy )
00096     {
00097         data_.resize(szx);
00098 
00099         typedef typename std::vector< std::vector<Type> >::iterator dataIterator;
00100         for ( dataIterator it=data_.begin(); it!=data_.end(); it++ )
00101         {
00102             it->resize(szy);
00103         }
00104         
00105         sizeX_ = szx;
00106         sizeY_ = szy;
00107     }
00108     
00109     template<typename Type>
00110     void 
00111     TypeMap<Type>::fill(Type val)
00112     {
00113         typedef typename std::vector< std::vector<Type> >::iterator dataIterator;
00114         for( dataIterator it=data_.begin(); it!=data_.end(); it++ )
00115         {
00116             std::fill( it->begin(), it->end(), val );
00117         }
00118     }
00119     
00120     template<typename Type>
00121     bool 
00122     TypeMap<Type>::tryElement( int x, int y, Type & val ) const
00123     { 
00124         //will return -1.0 if outside the grid
00125         if (!isInGrid( x, y )) return false;
00126         val = data_[x][y];
00127         return true;
00128     }
00129     
00130     
00131     template<typename Type>
00132     void 
00133     TypeMap<Type>::setElement( int x, int y, Type val )
00134     { 
00135         //will not set any value if outside the grid
00136         if( x >= (int)sizeX_ || y >= (int)sizeY_ || x < 0 || y < 0 ) return;
00137         data_[x][y] = val;
00138     }
00139     
00140     
00141 
00142 }
00143 #endif
00144 
 

Webmaster: Tobias Kaupp (tobasco at users.sourceforge.net)


Generated for Orca Robotics by  doxygen 1.4.5