00001 #ifndef INTERACTIVE_WORLD_OBJECT_ON_SURFACE_H_ 00002 #define INTERACTIVE_WORLD_OBJECT_ON_SURFACE_H_ 00003 00004 #include <string> 00005 #include <vector> 00006 00007 namespace rail 00008 { 00009 namespace interactive_world 00010 { 00011 00012 struct observation 00013 { 00014 time_t seen; 00015 time_t removed; 00016 }; 00017 00018 class ObjectOnSurfaceModel 00019 { 00020 public: 00021 ObjectOnSurfaceModel(const std::string &object = "", const std::string &surface = ""); 00022 00023 const std::string &getObject() const; 00024 00025 void setObject(const std::string &object); 00026 00027 const std::string &getSurface() const; 00028 00029 void setSurface(const std::string &surface); 00030 00031 time_t getLastSeen() const; 00032 00033 void addObservation(const time_t seen, const time_t removed); 00034 00035 double getMu(); 00036 00037 double getLambda(); 00038 00039 double getCurrentProbability(); 00040 00041 private: 00042 std::string object_, surface_; 00043 time_t last_seen_; 00044 std::vector<struct observation> observations_; 00045 bool dirty_; 00046 double mu_; 00047 }; 00048 00049 } 00050 } 00051 00052 #endif