summaryrefslogtreecommitdiff
path: root/odb/cache-traits.hxx
diff options
context:
space:
mode:
authorKaren Arutyunov <karen@codesynthesis.com>2024-01-24 16:53:38 +0300
committerKaren Arutyunov <karen@codesynthesis.com>2024-01-24 16:53:38 +0300
commit26e36b3a9d7b49d46ecfa69b447482251acba8ac (patch)
tree5436b7857fae9aee50d018ea0eef35a529fc03e4 /odb/cache-traits.hxx
parent0074faad1b27f3cd52a606c438e4f1375956d731 (diff)
Turn libodb repository into package for muti-package repositorylibodb
Diffstat (limited to 'odb/cache-traits.hxx')
-rw-r--r--odb/cache-traits.hxx182
1 files changed, 0 insertions, 182 deletions
diff --git a/odb/cache-traits.hxx b/odb/cache-traits.hxx
deleted file mode 100644
index a8cf750..0000000
--- a/odb/cache-traits.hxx
+++ /dev/null
@@ -1,182 +0,0 @@
-// file : odb/cache-traits.hxx
-// license : GNU GPL v2; see accompanying LICENSE file
-
-#ifndef ODB_CACHE_TRAITS_HXX
-#define ODB_CACHE_TRAITS_HXX
-
-#include <odb/pre.hxx>
-
-#include <odb/traits.hxx>
-#include <odb/forward.hxx>
-#include <odb/session.hxx>
-#include <odb/pointer-traits.hxx>
-#include <odb/no-op-cache-traits.hxx>
-
-namespace odb
-{
- // pointer_cache_traits
- //
- // Caching traits for objects passed by pointer. P should be the canonical
- // pointer (non-const).
- //
- template <typename P, typename S, pointer_kind pk>
- struct pointer_cache_traits_impl
- {
- typedef P pointer_type;
- typedef S session_type;
- typedef odb::pointer_traits<pointer_type> pointer_traits;
- typedef typename pointer_traits::element_type object_type;
- typedef typename object_traits<object_type>::id_type id_type;
- typedef typename session_type::template cache_position<object_type>
- position_type;
-
- struct insert_guard
- {
- insert_guard () {}
- insert_guard (const position_type& pos): pos_ (pos) {}
- ~insert_guard () {session_type::_cache_erase (pos_);}
-
- const position_type&
- position () const {return pos_;}
-
- void
- release () {pos_ = position_type ();}
-
- // Note: doesn't call erase() on the old position (assumes empty).
- //
- void
- reset (const position_type& pos) {pos_ = pos;}
-
- private:
- position_type pos_;
- };
-
- // Cache management.
- //
- // We need the insert() overload with explicit id to handle self-
- // references. In such cases the object is not yet loaded and the
- // id member does not contain the correct id.
- //
- // Qualify the database type to resolve a phony ambiguity in VC 10.
- //
- static position_type
- insert (odb::database& db, const id_type& id, const pointer_type& p)
- {
- return session_type::template _cache_insert<object_type> (db, id, p);
- }
-
- static position_type
- insert (odb::database& db, const pointer_type& p)
- {
- const id_type& id (
- object_traits<object_type>::id (
- pointer_traits::get_ref (p)));
-
- return session_type::template _cache_insert<object_type> (db, id, p);
- }
-
- static pointer_type
- find (odb::database& db, const id_type& id)
- {
- return session_type::template _cache_find<object_type> (db, id);
- }
-
- static void
- erase (const position_type& p)
- {
- session_type::template _cache_erase<object_type> (p);
- }
-
- // Notifications.
- //
- static void
- persist (const position_type& p)
- {
- session_type::template _cache_persist<object_type> (p);
- }
-
- static void
- load (const position_type& p)
- {
- session_type::template _cache_load<object_type> (p);
- }
-
- static void
- update (odb::database& db, const object_type& obj)
- {
- session_type::template _cache_update<object_type> (db, obj);
- }
-
- static void
- erase (odb::database& db, const id_type& id)
- {
- session_type::template _cache_erase<object_type> (db, id);
- }
- };
-
- // Unique pointers don't work with the object cache.
- //
- template <typename P, typename S>
- struct pointer_cache_traits_impl<P, S, pk_unique>:
- no_op_pointer_cache_traits<P> {};
-
- template <typename P, typename S>
- struct pointer_cache_traits:
- pointer_cache_traits_impl<P, S, pointer_traits<P>::kind> {};
-
- // reference_cache_traits
- //
- // Caching traits for objects passed by reference. T should be the
- // canonical object type (non-const). Only if the object pointer
- // kind is raw do we add the object to the session.
- //
- template <typename T, typename S, pointer_kind pk>
- struct reference_cache_traits_impl: no_op_reference_cache_traits<T> {};
-
- template <typename T, typename S>
- struct reference_cache_traits_impl<T, S, pk_raw>
- {
- typedef T object_type;
- typedef typename object_traits<object_type>::pointer_type pointer_type;
- typedef typename object_traits<object_type>::id_type id_type;
-
- typedef pointer_cache_traits<pointer_type, S> pointer_traits;
- typedef typename pointer_traits::position_type position_type;
- typedef typename pointer_traits::insert_guard insert_guard;
-
- static position_type
- insert (odb::database& db, const id_type& id, object_type& obj)
- {
- pointer_type p (&obj);
- return pointer_traits::insert (db, id, p);
- }
-
- static position_type
- insert (odb::database& db, object_type& obj)
- {
- pointer_type p (&obj);
- return pointer_traits::insert (db, p);
- }
-
- static void
- persist (const position_type& p)
- {
- pointer_traits::persist (p);
- }
-
- static void
- load (const position_type& p)
- {
- pointer_traits::load (p);
- }
- };
-
- template <typename T, typename S>
- struct reference_cache_traits:
- reference_cache_traits_impl<
- T, S, pointer_traits<typename object_traits<T>::pointer_type>::kind> {};
-}
-
-#include <odb/post.hxx>
-
-#endif // ODB_CACHE_TRAITS_HXX