21 #ifndef _libint2_src_bin_libint_key_h_ 22 #define _libint2_src_bin_libint_key_h_ 24 #include <libint2/util/intrinsic_types.h> 32 template <
typename T,
typename I>
42 const Type& type()
const {
return t_; }
43 const Instance& instance()
const {
return i_; }
49 static Type invalid_type_;
50 static Instance invalid_instance_;
56 template <
typename T,
typename I>
59 return a.type() == b.type() && a.instance() == b.instance();
62 template <
typename T,
typename I>
63 bool operator<(
const TypeAndInstance<T,I>& a,
64 const TypeAndInstance<T,I>& b) {
66 (a.type() < b.type()) ||
67 ( (a.type() == b.type()) &&
68 (a.instance() < b.instance())
85 template <
typename Target,
typename Source>
87 string_cast(Source s) {
88 std::ostringstream oss;
90 return Target(oss.str());
102 KeyTypes::cast<long long>(
long long i) {
103 return string_cast<InstanceID>(i);
107 KeyTypes::cast<unsigned long long>(
unsigned long long i) {
108 return string_cast<InstanceID>(i);
mpz_class InstanceID
some classes need to have distinct instances to have unique InstanceID's, e.g. generalized Singletons
Definition: key.h:81
Type/Instance combination serves as a key to quickly compare 2 polymorphic Singletons.
Definition: key.h:33
Defaults definitions for various parameters assumed by Libint.
Definition: algebra.cc:24
unsigned int ClassID
distinct classes have unique ClassID's
Definition: key.h:79
TypeAndInstance< KeyTypes::ClassID, KeyTypes::InstanceID > DGVertexKey
this composite hashing key works for DGVertex
Definition: key.h:113
Collection of types used for constructing keys in libint2.
Definition: key.h:77