2017-03-03 20:59:38 +08:00
|
|
|
#pragma once
|
|
|
|
|
2017-03-27 19:09:14 +08:00
|
|
|
#include <cppitertools/reversed.hpp>
|
2017-03-03 20:59:38 +08:00
|
|
|
#include "cppitertools/imap.hpp"
|
2017-02-15 21:10:16 +08:00
|
|
|
|
|
|
|
/**
|
2017-03-03 20:59:38 +08:00
|
|
|
* Creates an iterator over record accessors (Edge or Vertex).
|
2017-02-15 21:10:16 +08:00
|
|
|
*
|
2017-03-03 20:59:38 +08:00
|
|
|
* @tparam TAccessor The exact type of accessor.
|
|
|
|
* @tparam TIterable An iterable of pointers to version list objects.
|
2017-02-15 21:10:16 +08:00
|
|
|
*
|
|
|
|
* @param records An iterable of version list pointers for which accessors
|
|
|
|
* need to be created.
|
|
|
|
* @param db_accessor A database accessor to create the record accessors with.
|
|
|
|
*/
|
2017-03-03 20:59:38 +08:00
|
|
|
template <typename TAccessor, typename TIterable>
|
|
|
|
auto make_accessor_iterator(const TIterable &records, GraphDbAccessor &db_accessor) {
|
|
|
|
return iter::imap([&db_accessor](auto vlist) {
|
|
|
|
return TAccessor(*vlist, db_accessor);
|
2017-03-27 19:09:14 +08:00
|
|
|
// note that here we iterate over records in REVERSED order
|
|
|
|
// this is necessary for DETACH DELETE (see GraphDbAccessor)
|
|
|
|
// which deletes items from relationship collections in a
|
|
|
|
// vertex accessor
|
|
|
|
}, iter::reversed(records));
|
2017-02-15 21:10:16 +08:00
|
|
|
}
|