From 2319d01e262b705716e19474865f555f3ca81a7d Mon Sep 17 00:00:00 2001 From: Karen Arutyunov Date: Mon, 1 May 2017 13:50:13 +0300 Subject: Add hxx extension for headers and lib prefix for library dirs --- bpkg/database.hxx | 82 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 bpkg/database.hxx (limited to 'bpkg/database.hxx') diff --git a/bpkg/database.hxx b/bpkg/database.hxx new file mode 100644 index 0000000..f90aa6b --- /dev/null +++ b/bpkg/database.hxx @@ -0,0 +1,82 @@ +// file : bpkg/database.hxx -*- C++ -*- +// copyright : Copyright (c) 2014-2017 Code Synthesis Ltd +// license : MIT; see accompanying LICENSE file + +#ifndef BPKG_DATABASE_HXX +#define BPKG_DATABASE_HXX + +#include // remove_reference + +#include +#include +#include + +#include + +#include +#include + +#include + +namespace bpkg +{ + using odb::query; + using odb::result; + using odb::session; + + using odb::sqlite::database; + using odb::sqlite::transaction; + + database + open (const dir_path& configuration, tracer&, bool create = false); + + struct tracer_guard + { + tracer_guard (database& db, tracer& t) + : db_ (db), t_ (db.tracer ()) {db.tracer (t);} + ~tracer_guard () {db_.tracer (*t_);} + + private: + database& db_; + odb::tracer* t_; + }; + + // Range-based for-loop iteration over query result that returns + // object pointers. For example: + // + // for (shared_ptr o: pointer_result (db.query (...))) + // + template + class pointer_result_range + { + R r_; + + public: + pointer_result_range (R&& r): r_ (forward (r)) {} + + using base_iterator = typename std::remove_reference::type::iterator; + + struct iterator: base_iterator + { + iterator () = default; + + explicit + iterator (base_iterator i): base_iterator (move (i)) {} + + typename base_iterator::pointer_type + operator* () {return this->load ();} + }; + + iterator begin () {return iterator (r_.begin ());} + iterator end () {return iterator (r_.end ());} + }; + + template + inline pointer_result_range + pointer_result (R&& r) + { + return pointer_result_range (forward (r)); + } +} + +#endif // BPKG_DATABASE_HXX -- cgit v1.1