From 2c1fe0aa7b967a68e65465962182cc6551a6c51f Mon Sep 17 00:00:00 2001 From: Karen Arutyunov Date: Thu, 25 Jul 2019 22:24:19 +0300 Subject: Add ODB container traits for small_vector --- libbutl/small-vector-odb.hxx | 67 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 libbutl/small-vector-odb.hxx diff --git a/libbutl/small-vector-odb.hxx b/libbutl/small-vector-odb.hxx new file mode 100644 index 0000000..4273e61 --- /dev/null +++ b/libbutl/small-vector-odb.hxx @@ -0,0 +1,67 @@ +// file : libbutl/small-vector-odb.hxx -*- C++ -*- +// copyright : Copyright (c) 2014-2019 Code Synthesis Ltd +// license : MIT; see accompanying LICENSE file + +#pragma once + +#include + +#include + +#include + +namespace odb +{ + template + class access::container_traits> + { + public: + static const container_kind kind = ck_ordered; + static const bool smart = false; + + using container_type = butl::small_vector; + + using value_type = V; + using index_type = typename container_type::size_type; + + using functions = ordered_functions; + + public: + static void + persist (const container_type& c, const functions& f) + { + for (index_type i (0), n (c.size ()); i < n; ++i) + f.insert (i, c[i]); + } + + static void + load (container_type& c, bool more, const functions& f) + { + c.clear (); + + while (more) + { + index_type dummy; + c.push_back (value_type ()); + more = f.select (dummy, c.back ()); + } + } + + static void + update (const container_type& c, const functions& f) + { + f.delete_ (); + + for (index_type i (0), n (c.size ()); i < n; ++i) + f.insert (i, c[i]); + } + + static void + erase (const functions& f) + { + f.delete_ (); + } + }; +} + +#include -- cgit v1.1