1 /* 2 * Copyright (C) 2004-2021 Edward F. Valeev 3 * 4 * This file is part of Libint. 5 * 6 * Libint is free software: you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License as published by 8 * the Free Software Foundation, either version 3 of the License, or 9 * (at your option) any later version. 10 * 11 * Libint is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 * GNU General Public License for more details. 15 * 16 * You should have received a copy of the GNU General Public License 17 * along with Libint. If not, see <http://www.gnu.org/licenses/>. 18 * 19 */ 20 21 #ifndef _libint2_src_bin_libint_contract_h_ 22 #define _libint2_src_bin_libint_contract_h_ 23 24 namespace libint2 { 25 26 /// use this as a base to add to Derived a "contracted()" attribute 27 template <typename Derived> class Contractable { 28 public: Contractable()29 Contractable() : value_(default_value_) {} Contractable(const Contractable & source)30 Contractable(const Contractable& source) : value_(source.value_) {} 31 Contractable& operator=(const Contractable& source) { 32 value_ = source.value_; 33 return *this; 34 } contracted()35 bool contracted() const { return value_; } uncontract()36 void uncontract() { value_ = false; } contract()37 void contract() { value_ = true; } set_contracted_default_value(bool dv)38 static void set_contracted_default_value(bool dv) { default_value_ = dv; } 39 private: 40 bool value_; 41 static bool default_value_; 42 }; 43 template <typename Derived> 44 bool Contractable<Derived>::default_value_ = false; 45 46 }; 47 48 #endif 49