Skip to content
Snippets Groups Projects

ENH: Add retrieval and queries to Extern C interface

Merged Florian Spreckelsen requested to merge f-extended-c into f-files
5 files
+ 81
136
Compare changes
  • Side-by-side
  • Inline
Files
5
@@ -34,7 +34,6 @@
#include <iterator>
// IWYU pragma: no_include <ext/alloc_traits.h>
#include <memory> // for shared_ptr, unique_ptr
#include <stdexcept>
#include <string> // for string
#include <vector> // for vector
@@ -179,8 +178,9 @@ class ResultSet {
public:
virtual ~ResultSet() = default;
[[nodiscard]] virtual auto Size() const noexcept -> int = 0;
[[nodiscard]] virtual auto At(const int index) const -> const Entity & = 0;
[[nodiscard]] virtual auto size() const noexcept -> int = 0;
[[nodiscard]] virtual auto at(const int index) const -> const Entity & = 0;
[[nodiscard]] virtual auto mutable_at(int index) const -> Entity * = 0;
auto begin() const -> iterator;
auto end() const -> iterator;
@@ -201,49 +201,22 @@ private:
/**
* Container with results of a transaction.
*
* In contrast to UniqueResult, this one can also hold multiple entities or zero
* entities.
*/
class MultiResultSet : public ResultSet {
public:
~MultiResultSet() = default;
explicit MultiResultSet(std::vector<std::unique_ptr<Entity>> result_set);
[[nodiscard]] inline auto Size() const noexcept -> int override {
[[nodiscard]] inline auto size() const noexcept -> int override {
return this->entities.size();
}
[[nodiscard]] inline auto At(const int index) const
[[nodiscard]] inline auto at(const int index) const
-> const Entity & override {
return *(this->entities.at(index));
}
std::vector<std::unique_ptr<Entity>> entities;
};
/**
* Container with the single result of a transaction.
*
* In contrast to MultiResultSet, this one guarantees to hold exactly one
* entity.
*/
class UniqueResult : public ResultSet {
public:
~UniqueResult() = default;
explicit inline UniqueResult(ProtoEntity *protoEntity)
: entity(new Entity(protoEntity)){};
explicit inline UniqueResult(IdResponse *idResponse)
: entity(new Entity(idResponse)){};
[[nodiscard]] auto GetEntity() const -> const Entity &;
[[nodiscard]] inline auto Size() const noexcept -> int override { return 1; }
[[nodiscard]] inline auto At(const int index) const
-> const Entity & override {
if (index != 0) {
throw std::out_of_range("Index out of range. Length is 1.");
}
return *(this->entity);
[[nodiscard]] inline auto mutable_at(int index) const -> Entity * override {
return this->entities.at(index).get();
}
private:
std::unique_ptr<Entity> entity;
std::vector<std::unique_ptr<Entity>> entities;
};
/**
Loading