00001 #ifndef OBJECT_TRACKER_OBJECTMODEL_H 00002 #define OBJECT_TRACKER_OBJECTMODEL_H 00003 00004 #include <boost/shared_ptr.hpp> 00005 #include <worldmodel_msgs/ObjectModel.h> 00006 #include <worldmodel_msgs/ImagePercept.h> 00007 #include <worldmodel_msgs/PosePercept.h> 00008 #include <std_msgs/String.h> 00009 #include <visualization_msgs/MarkerArray.h> 00010 00011 #include <list> 00012 #include <string> 00013 #include <boost/thread/recursive_mutex.hpp> 00014 00015 namespace object_tracker { 00016 00017 class Object; 00018 00019 class ObjectModel 00020 { 00021 public: 00022 typedef boost::shared_ptr<Object> ObjectPtr; 00023 typedef boost::shared_ptr<Object const> ObjectConstPtr; 00024 00025 typedef std::list<ObjectPtr> ObjectList; 00026 typedef ObjectList::iterator iterator; 00027 typedef ObjectList::const_iterator const_iterator; 00028 00029 public: 00030 ObjectModel(); 00031 virtual ~ObjectModel(); 00032 00033 ObjectList getObjects() const; 00034 ObjectList getObjects(const std::string& class_id) const; 00035 ObjectPtr getObject(const std::string& object_id) const; 00036 00037 worldmodel_msgs::ObjectModelPtr getObjectModelMessage() const; 00038 void getVisualization(visualization_msgs::MarkerArray &markers) const; 00039 void reset(); 00040 00041 iterator begin() { return objects.begin(); } 00042 iterator end() { return objects.end(); } 00043 const_iterator begin() const { return objects.begin(); } 00044 const_iterator end() const { return objects.end(); } 00045 00046 ObjectPtr create(const std::string& class_id = "", const std::string& object_id = ""); 00047 ObjectPtr add(const std::string& class_id = "", const std::string& object_id = ""); 00048 ObjectPtr add(ObjectPtr object); 00049 void remove(ObjectPtr object); 00050 void remove(iterator it); 00051 00052 void lock() const { objectsMutex.lock(); } 00053 bool try_lock() const { return objectsMutex.try_lock(); } 00054 void unlock() const { objectsMutex.unlock(); } 00055 00056 private: 00057 ObjectModel(const ObjectModel&); 00058 ObjectList objects; 00059 mutable boost::recursive_mutex objectsMutex; 00060 }; 00061 00062 } // namespace object_tracker 00063 00064 #endif // OBJECT_TRACKER_OBJECTMODEL_H