LIBINT 2.9.0
singleton.h
1/*
2 * Copyright (C) 2004-2024 Edward F. Valeev
3 *
4 * This file is part of Libint library.
5 *
6 * Libint library is free software: you can redistribute it and/or modify
7 * it under the terms of the GNU Lesser 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 library 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 Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public License
17 * along with Libint library. If not, see <http://www.gnu.org/licenses/>.
18 *
19 */
20
21#ifndef _libint2_include_libint2_util_singleton_h_
22#define _libint2_include_libint2_util_singleton_h_
23
24#include <memory>
25
26namespace libint2 {
27namespace detail {
28
29template <typename T>
31 public:
32 static T* instance() {
33 if (not instance_) instance_ = std::unique_ptr<T>(new T);
34 return instance_.get();
35 }
36 static bool instance_exists() { return instance_.get() != nullptr; }
37 static void delete_instance() { instance_.reset(); }
38
39 private:
40 managed_singleton() = delete;
41 static std::unique_ptr<T> instance_;
42};
43template <typename T>
44std::unique_ptr<T> managed_singleton<T>::instance_;
45
46} // namespace detail
47} // namespace libint2
48
49#endif /* header guard */
Definition singleton.h:30
Defaults definitions for various parameters assumed by Libint.
Definition algebra.cc:24