lsst.utils  16.0-10-gbca2faa
Cache.h
Go to the documentation of this file.
1 #ifndef LSST_UTILS_PYTHON_CACHE_H
2 #define LSST_UTILS_PYTHON_CACHE_H
3 
4 #include <functional> // for std::function
5 #include "pybind11/pybind11.h"
6 #include "pybind11/stl.h"
7 #include "pybind11/functional.h" // for binding std::function
8 
9 #include "lsst/utils/Cache.h"
10 
11 namespace py = pybind11;
12 using namespace pybind11::literals;
13 
14 namespace lsst {
15 namespace utils {
16 namespace python {
17 
18 template <typename Key, typename Value, typename KeyHash=boost::hash<Key>,
19  typename KeyPred=std::equal_to<Key>>
20 void declareCache(py::module & mod, std::string const& name) {
22  py::class_<Class> cls(mod, name.c_str());
23 
24  cls.def(py::init<std::size_t>(), "maxElements"_a=0);
25  cls.def("__call__",
26  [](Class & self, Key const& key, std::function<Value(Key const& key)> func) {
27  py::gil_scoped_release release;
28  return self(key, func);
29  }, "key"_a, "func"_a);
30  cls.def("__getitem__", &Class::operator[]);
31  cls.def("add", &Class::add, "key"_a, "value"_a);
32  cls.def("size", &Class::size);
33  cls.def("__len__", &Class::size);
34  cls.def("keys", &Class::keys);
35  cls.def("contains", &Class::contains);
36  cls.def("__contains__", &Class::contains);
37  cls.def("capacity", &Class::capacity);
38  cls.def("reserve", &Class::reserve);
39  cls.def("flush", &Class::flush);
40 }
41 
42 }}} // namespace lsst::utils::python
43 
44 #endif // ifndef LSST_UTILS_PYTHON_CACHE_H
void declareCache(py::module &mod, std::string const &name)
Definition: Cache.h:20
STL class.
Forward declarations for lsst::utils::Cache.
T c_str(T... args)
Cache of most recently used values.
Definition: Cache.h:53