TuttleOFX
1
|
00001 #ifndef _TUTTLE_HOST_NODEHASHCONTAINER_HPP_ 00002 #define _TUTTLE_HOST_NODEHASHCONTAINER_HPP_ 00003 00004 #include "NodeAtTimeKey.hpp" 00005 #include "exceptions.hpp" 00006 00007 #include <ofxCore.h> 00008 00009 #include <map> 00010 #include <string> 00011 #include <cstddef> 00012 #include <ostream> 00013 00014 namespace tuttle { 00015 namespace host { 00016 00017 class NodeHashContainer 00018 { 00019 public: 00020 NodeHashContainer() 00021 {} 00022 00023 std::size_t getFirst() const 00024 { 00025 return _hashes.begin()->second; 00026 } 00027 std::size_t getHash( const NodeAtTimeKey& k ) const 00028 { 00029 Map::const_iterator it = _hashes.find(k); 00030 if( it == _hashes.end() ) 00031 { 00032 BOOST_THROW_EXCEPTION( exception::BadIndex() ); 00033 } 00034 return it->second; 00035 } 00036 std::size_t getHash( const std::string& name, const OfxTime& time ) const 00037 { 00038 return getHash( NodeAtTimeKey(name, time) ); 00039 } 00040 00041 void addHash( const std::string& name, const OfxTime& time, const std::size_t hash ) 00042 { 00043 NodeAtTimeKey k(name, time); 00044 addHash( k, hash ); 00045 } 00046 void addHash( const NodeAtTimeKey& k, const std::size_t hash ) 00047 { 00048 _hashes[k] = hash; 00049 } 00050 00051 public: 00052 friend std::ostream& operator<<( std::ostream& os, const NodeHashContainer& c ); 00053 00054 private: 00055 typedef std::map<NodeAtTimeKey, std::size_t> Map; 00056 Map _hashes; 00057 }; 00058 00059 } 00060 } 00061 00062 #endif 00063