TuttleOFX  1
TuttleOFX/libraries/tuttle/src/tuttle/host/NodeHashContainer.hpp
Go to the documentation of this file.
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