added date_type_t, time_type_t and timestamp, ensure allocated postgres resources are released, split repository into basic_repository and repository.

This commit is contained in:
2026-01-06 15:43:20 +01:00
parent f07a360da2
commit 0c6b5a0a93
60 changed files with 1132 additions and 1225 deletions
+6 -21
View File
@@ -9,35 +9,20 @@
namespace matador::object {
class repository_node;
// template<typename Type>
// class observer_ptr {
// public:
// explicit observer_ptr(std::unique_ptr<observer<Type>> &&o)
// : observer_(std::move(o)) {}
//
// operator bool() const { return observer_ != nullptr; }
//
// observer<Type> *get() const { return observer_.get(); }
// observer<Type> &operator*() const { return *observer_; }
// observer<Type> *operator->() const { return observer_.get(); }
//
// private:
// std::unique_ptr<observer<Type>> observer_;
// };
template<typename Type>
class object_info final : public basic_object_info {
public:
using create_func = std::function<std::unique_ptr<Type>()>;
object_info(const std::shared_ptr<repository_node>& node,
std::shared_ptr<class object> &&obj,
object_info(const repository_node& node,
const std::shared_ptr<class object> &obj,
std::vector<std::unique_ptr<observer<Type>>>&& observers,
create_func&& creator)
: basic_object_info(node, std::move(obj))
: basic_object_info(node, obj)
, creator_(std::move(creator))
, observers_(std::move(observers)){}
explicit object_info(const std::shared_ptr<repository_node>& node)
explicit object_info(const repository_node& node)
: basic_object_info(node, {}) {
}
@@ -46,13 +31,13 @@ public:
void on_attach() const override {
for (auto &observer : observers_) {
observer->on_attach(*node_, prototype_);
observer->on_attach(node_, prototype_);
}
}
void on_detach() const override {
for (auto &observer : observers_) {
observer->on_detach(*node_, prototype_);
observer->on_detach(node_, prototype_);
}
}