00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef DMCUT2_LATTICE_SPECIES_HPP
00020 #define DMCUT2_LATTICE_SPECIES_HPP
00021
00022 #include <string>
00023
00024 namespace Surface {
00025
00033 class Species {
00034 public:
00035 typedef std::string Name;
00036
00038 Species(const Name& name, double molar_mass):
00039 name_(name), mass_(molar_mass)
00040 { }
00041
00045
00046
00047 Name name() const
00048 { return name_; }
00049
00050 double mass() const
00051 { return mass_; }
00052
00054
00056 bool no_species() const
00057 { return name() == "empty"; }
00058
00059
00060 private:
00062 Name name_;
00063
00065 double mass_;
00066 };
00067
00069 const static Species no_species = Species("empty", 0);
00070
00072 inline bool
00073 operator== (const Surface::Species& lhs, const Surface::Species& rhs)
00074 { return lhs.mass() == rhs.mass(); }
00075
00077 inline bool
00078 operator!= (const Surface::Species& lhs, const Surface::Species& rhs)
00079 { return !(lhs == rhs); }
00080
00082 inline bool
00083 operator< (const Surface::Species& lhs, const Surface::Species& rhs)
00084 { return lhs.mass() < rhs.mass(); }
00085
00086 }
00087
00088
00089 #include <ostream>
00091 inline std::ostream&
00092 operator<< (std::ostream& os, const Surface::Species& sp)
00093 { return os << sp.name(); }
00094
00095 #endif