point_iterator_safe.h
Go to the documentation of this file.
00001 
00002 #include <boost/foreach.hpp>
00003 #include <sensor_msgs/PointCloud2.h>
00004 #include <sensor_msgs/PointField.h>
00005 
00006 namespace point_cloud_color {
00007 
00014 template <bool SAFE> class PointCloud2Iterator {
00015 public:
00016   PointCloud2Iterator(sensor_msgs::PointCloud2::Ptr pcl, std::vector<std::string> fieldNames);
00017   inline bool isFieldAvailable(uint32_t fieldIndex) {
00018       return fieldsAvailable[fieldIndex];
00019   }
00020   template <class T> inline bool isFieldCompatible<T>(uint32_t fieldIndex) {
00021       return sizeof(T) == fieldDataSizes[fieldIndex];
00022   }
00023   template <> inline bool isFieldCompatible<float>(uint32_t fieldIndex) {
00024       return fieldDataTypes[fieldIndex] == sensor_msgs::PointField::FLOAT32;
00025   }
00026   template <bool SAFE, class T> T getField<T>(uint32_t pointIndex, uint32_t fieldIndex);
00027   template <class T> void setField<T>(uint32_t pointIndex, uint32_t fieldIndex, T value);
00028 private:
00029   inline void checkFieldAvailable(uint32_t fieldIndex) {
00030       if (SAFE && !isFieldAvailable(fieldIndex)) {
00031           throw std::runtime_error("Field not available.");
00032       }
00033   }
00034   template <class T> inline void checkFieldCompatible<T>(uint32_t fieldIndex) {
00035       if (SAFE && isFieldCompatible<T>(fieldIndex)) {
00036           throw std::runtime_error("Field not compatible.");
00037       }
00038   }
00039   sensor_msgs::PointCloud2::Ptr pcl;
00040   std::vector<std::string> fieldNames;
00041   std::vector<bool> fieldsAvailable;
00042   std::vector<uint32_t> fieldOffsets;
00043   std::vector<uint8_t> fieldDataTypes;
00044   std::vector<size_t> fieldDataSizes;
00045 };
00046 
00047 } // namespace point_cloud_color
 All Classes Namespaces Files Functions Variables Typedefs


point_cloud_color
Author(s): Tomas Petricek / petrito1@cmp.felk.cvut.cz
autogenerated on Tue Dec 10 2013 14:28:16