00001 00028 #pragma once 00029 00030 #include <list> 00031 #include <ostream> 00032 00033 namespace isam { 00034 00035 class Element { 00036 Element(const Element& rhs); // not allowed 00037 const Element& operator= (const Element& rhs); // not allowed 00038 00039 const char* _name; 00040 00041 int _start; // needed for Slam::jacobian 00042 00043 protected: 00044 int _id; 00045 int _dim; 00046 00047 public: 00048 Element(const char* name, int dim) : _name(name), _dim(dim) {} 00049 virtual ~Element() {}; 00050 00051 virtual int unique_id() {return _id;} 00052 virtual const char* name() const {return _name;} 00053 inline int dim() const {return _dim;} 00054 inline int start() const {return _start;} 00055 00056 virtual void write(std::ostream &out) const { 00057 out << name(); 00058 } 00059 00060 friend class Slam; 00061 friend class Covariances; 00062 }; 00063 00064 }