00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef DMCUT2_INTERACTIONS_ENERGY_CONTAINER_HPP
00020 #define DMCUT2_INTERACTIONS_ENERGY_CONTAINER_HPP
00021
00022 #include <string>
00023 #include <tr1/tuple>
00024 #include <ml_container/associative_vector.hpp>
00025 #include "Species.hpp"
00026
00027 namespace Surface { class Site; }
00028
00029 namespace Interactions {
00030 namespace TwoBody {
00037 class EnergyContainer {
00038
00040 typedef std::tr1::tuple<Surface::Species, std::string, Surface::Species, std::string> lookup_key;
00041
00043 typedef ml_container::associative_vector< lookup_key, double > container_type;
00044
00045 public:
00049
00050 typedef container_type::key_type key_type;
00051 typedef container_type::value_type value_type;
00052 typedef container_type::mapped_type mapped_type;
00053 typedef container_type::reference reference;
00054 typedef container_type::const_reference const_reference;
00056
00060 reference operator[](const key_type& k)
00061 { return container_[k]; }
00062
00067 mapped_type operator()(const Surface::Site* const one_site_ptr, const Surface::Site* const other_site_ptr) const;
00068
00069 private:
00070 container_type container_;
00071 };
00072 }
00073 }
00074 #endif