From de51d7541bb58d4d7a23f17aa6eb3da41d826020 Mon Sep 17 00:00:00 2001 From: Ramin Yaghoubzadeh <ryaghoubzadeh@uni-bielefeld.de> Date: Fri, 20 Feb 2015 12:11:57 +0100 Subject: [PATCH] Almost done, updating internals now --- ipaacalib/cpp/CMakeLists.txt | 3 ++ ipaacalib/cpp/include/ipaaca/ipaaca-buffers.h | 24 +++++----- ipaacalib/cpp/include/ipaaca/ipaaca-ius.h | 44 +++++++++---------- ipaacalib/cpp/include/ipaaca/ipaaca-payload.h | 6 ++- ipaacalib/cpp/include/ipaaca/ipaaca.h | 2 + ipaacalib/cpp/src/ipaaca-buffers.cc | 8 ++-- ipaacalib/cpp/src/ipaaca-ius.cc | 16 +++---- ipaacalib/cpp/src/ipaaca-json.cc | 24 +++++++--- ipaacalib/cpp/src/ipaaca-payload.cc | 13 ++++++ 9 files changed, 86 insertions(+), 54 deletions(-) diff --git a/ipaacalib/cpp/CMakeLists.txt b/ipaacalib/cpp/CMakeLists.txt index 326c3f9..4a62151 100644 --- a/ipaacalib/cpp/CMakeLists.txt +++ b/ipaacalib/cpp/CMakeLists.txt @@ -164,6 +164,7 @@ set (SOURCE ) set (JSON_TEST_SOURCE + src/ipaaca-buffers.cc src/ipaaca-fake.cc src/ipaaca-iuinterface.cc src/ipaaca-json.cc # main @@ -171,6 +172,8 @@ set (JSON_TEST_SOURCE src/ipaaca-links.cc src/ipaaca-payload.cc src/ipaaca-string-utils.cc + # more stuff going beyond the fake test case + src/ipaaca-ius.cc ) diff --git a/ipaacalib/cpp/include/ipaaca/ipaaca-buffers.h b/ipaacalib/cpp/include/ipaaca/ipaaca-buffers.h index 2ab904f..89fece9 100644 --- a/ipaacalib/cpp/include/ipaaca/ipaaca-buffers.h +++ b/ipaacalib/cpp/include/ipaaca/ipaaca-buffers.h @@ -184,11 +184,11 @@ IPAACA_HEADER_EXPORT class IUEventHandler {//{{{ #endif protected: // informing functions - IPAACA_HEADER_EXPORT void _send_iu_link_update(IUInterface* iu, bool is_delta, revision_t revision, const LinkMap& new_links, const LinkMap& links_to_remove, const std::string& writer_name="undef"); - IPAACA_HEADER_EXPORT void _publish_iu_resend(boost::shared_ptr<IU> iu, const std::string& hidden_scope_name); + IPAACA_HEADER_EXPORT void _send_iu_link_update(IUInterface* iu, bool is_delta, revision_t revision, const LinkMap& new_links, const LinkMap& links_to_remove, const std::string& writer_name="undef") _IPAACA_OVERRIDE_; + IPAACA_HEADER_EXPORT void _publish_iu_resend(boost::shared_ptr<IU> iu, const std::string& hidden_scope_name) _IPAACA_OVERRIDE_; - IPAACA_HEADER_EXPORT void _send_iu_payload_update(IUInterface* iu, bool is_delta, revision_t revision, const std::map<std::string, const rapidjson::Document&>& new_items, const std::vector<std::string>& keys_to_remove, const std::string& writer_name="undef"); - IPAACA_HEADER_EXPORT void _send_iu_commission(IUInterface* iu, revision_t revision, const std::string& writer_name); + IPAACA_HEADER_EXPORT void _send_iu_payload_update(IUInterface* iu, bool is_delta, revision_t revision, const std::map<std::string, PayloadDocumentEntry::ptr>& new_items, const std::vector<std::string>& keys_to_remove, const std::string& writer_name="undef") _IPAACA_OVERRIDE_; + IPAACA_HEADER_EXPORT void _send_iu_commission(IUInterface* iu, revision_t revision, const std::string& writer_name) _IPAACA_OVERRIDE_; //IPAACA_HEADER_EXPORT void _send_iu_resendrequest(IUInterface* iu, revision_t revision, const std::string& writer_name); // remote access functions // _remote_update_links(IULinkUpdate) @@ -208,8 +208,8 @@ IPAACA_HEADER_EXPORT class IUEventHandler {//{{{ IPAACA_HEADER_EXPORT void add(boost::shared_ptr<IU> iu); IPAACA_HEADER_EXPORT boost::shared_ptr<IU> remove(const std::string& iu_uid); IPAACA_HEADER_EXPORT boost::shared_ptr<IU> remove(boost::shared_ptr<IU> iu); - IPAACA_HEADER_EXPORT boost::shared_ptr<IUInterface> get(const std::string& iu_uid); - IPAACA_HEADER_EXPORT std::set<boost::shared_ptr<IUInterface> > get_ius(); + IPAACA_HEADER_EXPORT boost::shared_ptr<IUInterface> get(const std::string& iu_uid) _IPAACA_OVERRIDE_; + IPAACA_HEADER_EXPORT std::set<boost::shared_ptr<IUInterface> > get_ius() _IPAACA_OVERRIDE_; typedef boost::shared_ptr<OutputBuffer> ptr; }; //}}} @@ -230,19 +230,19 @@ IPAACA_HEADER_EXPORT class IUEventHandler {//{{{ IPAACA_HEADER_EXPORT void _trigger_resend_request(rsb::EventPtr event); #endif protected: - IPAACA_HEADER_EXPORT inline void _send_iu_link_update(IUInterface* iu, bool is_delta, revision_t revision, const LinkMap& new_links, const LinkMap& links_to_remove, const std::string& writer_name="undef") + IPAACA_HEADER_EXPORT inline void _send_iu_link_update(IUInterface* iu, bool is_delta, revision_t revision, const LinkMap& new_links, const LinkMap& links_to_remove, const std::string& writer_name="undef") _IPAACA_OVERRIDE_ { IPAACA_WARNING("(ERROR) InputBuffer::_send_iu_link_update() should never be invoked") } - IPAACA_HEADER_EXPORT inline void _publish_iu_resend(boost::shared_ptr<IU> iu, const std::string& hidden_scope_name) + IPAACA_HEADER_EXPORT inline void _publish_iu_resend(boost::shared_ptr<IU> iu, const std::string& hidden_scope_name) _IPAACA_OVERRIDE_ { IPAACA_WARNING("(ERROR) InputBuffer::_publish_iu_resend() should never be invoked") } - IPAACA_HEADER_EXPORT inline void _send_iu_payload_update(IUInterface* iu, bool is_delta, revision_t revision, const std::map<std::string, const rapidjson::Document&>& new_items, const std::vector<std::string>& keys_to_remove, const std::string& writer_name="undef") + IPAACA_HEADER_EXPORT inline void _send_iu_payload_update(IUInterface* iu, bool is_delta, revision_t revision, const std::map<std::string, PayloadDocumentEntry::ptr>& new_items, const std::vector<std::string>& keys_to_remove, const std::string& writer_name="undef") _IPAACA_OVERRIDE_ { IPAACA_WARNING("(ERROR) InputBuffer::_send_iu_payload_update() should never be invoked") } - IPAACA_HEADER_EXPORT inline void _send_iu_commission(IUInterface* iu, revision_t revision, const std::string& writer_name="undef") + IPAACA_HEADER_EXPORT inline void _send_iu_commission(IUInterface* iu, revision_t revision, const std::string& writer_name="undef") _IPAACA_OVERRIDE_ { IPAACA_WARNING("(ERROR) InputBuffer::_send_iu_commission() should never be invoked") } @@ -274,8 +274,8 @@ IPAACA_HEADER_EXPORT class IUEventHandler {//{{{ IPAACA_HEADER_EXPORT ~InputBuffer() { IPAACA_IMPLEMENT_ME } - IPAACA_HEADER_EXPORT boost::shared_ptr<IUInterface> get(const std::string& iu_uid); - IPAACA_HEADER_EXPORT std::set<boost::shared_ptr<IUInterface> > get_ius(); + IPAACA_HEADER_EXPORT boost::shared_ptr<IUInterface> get(const std::string& iu_uid) _IPAACA_OVERRIDE_; + IPAACA_HEADER_EXPORT std::set<boost::shared_ptr<IUInterface> > get_ius() _IPAACA_OVERRIDE_; typedef boost::shared_ptr<InputBuffer> ptr; }; //}}} diff --git a/ipaacalib/cpp/include/ipaaca/ipaaca-ius.h b/ipaacalib/cpp/include/ipaaca/ipaaca-ius.h index 0fc9e80..c22e9a1 100644 --- a/ipaacalib/cpp/include/ipaaca/ipaaca-ius.h +++ b/ipaacalib/cpp/include/ipaaca/ipaaca-ius.h @@ -128,15 +128,15 @@ IPAACA_HEADER_EXPORT class IU: public IUInterface {//{{{ //IPAACA_IMPLEMENT_ME } IPAACA_HEADER_EXPORT static boost::shared_ptr<IU> create(const std::string& category, IUAccessMode access_mode=IU_ACCESS_PUSH, bool read_only=false, const std::string& payload_type="MAP" ); - IPAACA_HEADER_EXPORT inline Payload& payload() { return _payload; } - IPAACA_HEADER_EXPORT inline const Payload& const_payload() const { return _payload; } - IPAACA_HEADER_EXPORT void commit(); + IPAACA_HEADER_EXPORT inline Payload& payload() _IPAACA_OVERRIDE_ { return _payload; } + IPAACA_HEADER_EXPORT inline const Payload& const_payload() const _IPAACA_OVERRIDE_ { return _payload; } + IPAACA_HEADER_EXPORT void commit() _IPAACA_OVERRIDE_; protected: - IPAACA_HEADER_EXPORT virtual void _modify_links(bool is_delta, const LinkMap& new_links, const LinkMap& links_to_remove, const std::string& writer_name = ""); + IPAACA_HEADER_EXPORT virtual void _modify_links(bool is_delta, const LinkMap& new_links, const LinkMap& links_to_remove, const std::string& writer_name = "") _IPAACA_OVERRIDE_; //IPAACA_HEADER_EXPORT virtual void _publish_resend(boost::shared_ptr<IU> iu, const std::string& hidden_scope_name); - IPAACA_HEADER_EXPORT virtual void _modify_payload(bool is_delta, const std::map<std::string, std::string>& new_items, const std::vector<std::string>& keys_to_remove, const std::string& writer_name = ""); + IPAACA_HEADER_EXPORT virtual void _modify_payload(bool is_delta, const std::map<std::string, PayloadDocumentEntry::ptr>& new_items, const std::vector<std::string>& keys_to_remove, const std::string& writer_name = "") _IPAACA_OVERRIDE_; protected: IPAACA_HEADER_EXPORT virtual void _internal_commit(const std::string& writer_name = ""); public: @@ -158,8 +158,8 @@ IPAACA_HEADER_EXPORT class Message: public IU {//{{{ } IPAACA_HEADER_EXPORT static boost::shared_ptr<Message> create(const std::string& category, IUAccessMode access_mode=IU_ACCESS_MESSAGE, bool read_only=true, const std::string& payload_type="MAP" ); protected: - IPAACA_HEADER_EXPORT void _modify_links(bool is_delta, const LinkMap& new_links, const LinkMap& links_to_remove, const std::string& writer_name = ""); - IPAACA_HEADER_EXPORT void _modify_payload(bool is_delta, const std::map<std::string, std::string>& new_items, const std::vector<std::string>& keys_to_remove, const std::string& writer_name = ""); + IPAACA_HEADER_EXPORT void _modify_links(bool is_delta, const LinkMap& new_links, const LinkMap& links_to_remove, const std::string& writer_name = "") _IPAACA_OVERRIDE_; + IPAACA_HEADER_EXPORT void _modify_payload(bool is_delta, const std::map<std::string, PayloadDocumentEntry::ptr>& new_items, const std::vector<std::string>& keys_to_remove, const std::string& writer_name = "") _IPAACA_OVERRIDE_; protected: IPAACA_HEADER_EXPORT void _internal_commit(const std::string& writer_name = ""); public: @@ -181,12 +181,12 @@ IPAACA_HEADER_EXPORT class RemotePushIU: public IUInterface {//{{{ IPAACA_HEADER_EXPORT inline ~RemotePushIU() { //IPAACA_IMPLEMENT_ME } - IPAACA_HEADER_EXPORT inline Payload& payload() { return _payload; } - IPAACA_HEADER_EXPORT inline const Payload& const_payload() const { return _payload; } - IPAACA_HEADER_EXPORT void commit(); + IPAACA_HEADER_EXPORT inline Payload& payload() _IPAACA_OVERRIDE_ { return _payload; } + IPAACA_HEADER_EXPORT inline const Payload& const_payload() const _IPAACA_OVERRIDE_ { return _payload; } + IPAACA_HEADER_EXPORT void commit() _IPAACA_OVERRIDE_; protected: - IPAACA_HEADER_EXPORT void _modify_links(bool is_delta, const LinkMap& new_links, const LinkMap& links_to_remove, const std::string& writer_name = ""); - IPAACA_HEADER_EXPORT void _modify_payload(bool is_delta, const std::map<std::string, std::string>& new_items, const std::vector<std::string>& keys_to_remove, const std::string& writer_name = ""); + IPAACA_HEADER_EXPORT void _modify_links(bool is_delta, const LinkMap& new_links, const LinkMap& links_to_remove, const std::string& writer_name = "") _IPAACA_OVERRIDE_; + IPAACA_HEADER_EXPORT void _modify_payload(bool is_delta, const std::map<std::string, PayloadDocumentEntry::ptr>& new_items, const std::vector<std::string>& keys_to_remove, const std::string& writer_name = "") _IPAACA_OVERRIDE_; protected: IPAACA_HEADER_EXPORT void _apply_update(IUPayloadUpdate::ptr update); IPAACA_HEADER_EXPORT void _apply_link_update(IULinkUpdate::ptr update); @@ -209,12 +209,12 @@ IPAACA_HEADER_EXPORT class RemoteMessage: public IUInterface {//{{{ IPAACA_HEADER_EXPORT inline ~RemoteMessage() { //IPAACA_IMPLEMENT_ME } - IPAACA_HEADER_EXPORT inline Payload& payload() { return _payload; } - IPAACA_HEADER_EXPORT inline const Payload& const_payload() const { return _payload; } - IPAACA_HEADER_EXPORT void commit(); + IPAACA_HEADER_EXPORT inline Payload& payload() _IPAACA_OVERRIDE_ { return _payload; } + IPAACA_HEADER_EXPORT inline const Payload& const_payload() const _IPAACA_OVERRIDE_ { return _payload; } + IPAACA_HEADER_EXPORT void commit() _IPAACA_OVERRIDE_; protected: - IPAACA_HEADER_EXPORT void _modify_links(bool is_delta, const LinkMap& new_links, const LinkMap& links_to_remove, const std::string& writer_name = ""); - IPAACA_HEADER_EXPORT void _modify_payload(bool is_delta, const std::map<std::string, std::string>& new_items, const std::vector<std::string>& keys_to_remove, const std::string& writer_name = ""); + IPAACA_HEADER_EXPORT void _modify_links(bool is_delta, const LinkMap& new_links, const LinkMap& links_to_remove, const std::string& writer_name = "") _IPAACA_OVERRIDE_; + IPAACA_HEADER_EXPORT void _modify_payload(bool is_delta, const std::map<std::string, PayloadDocumentEntry::ptr>& new_items, const std::vector<std::string>& keys_to_remove, const std::string& writer_name = "") _IPAACA_OVERRIDE_; protected: IPAACA_HEADER_EXPORT void _apply_update(IUPayloadUpdate::ptr update); IPAACA_HEADER_EXPORT void _apply_link_update(IULinkUpdate::ptr update); @@ -235,13 +235,13 @@ IPAACA_HEADER_EXPORT class FakeIU: public IUInterface {//{{{ public: IPAACA_HEADER_EXPORT static boost::shared_ptr<FakeIU> create(); IPAACA_HEADER_EXPORT ~FakeIU(); - IPAACA_HEADER_EXPORT Payload& payload(); - IPAACA_HEADER_EXPORT const Payload& const_payload() const; - IPAACA_HEADER_EXPORT void commit(); + IPAACA_HEADER_EXPORT Payload& payload() _IPAACA_OVERRIDE_; + IPAACA_HEADER_EXPORT const Payload& const_payload() const _IPAACA_OVERRIDE_; + IPAACA_HEADER_EXPORT void commit() _IPAACA_OVERRIDE_; IPAACA_HEADER_EXPORT void add_fake_payload_item(const std::string& key, PayloadDocumentEntry::ptr entry); protected: - IPAACA_HEADER_EXPORT void _modify_links(bool is_delta, const LinkMap& new_links, const LinkMap& links_to_remove, const std::string& writer_name = ""); - IPAACA_HEADER_EXPORT void _modify_payload(bool is_delta, const std::map<std::string, PayloadDocumentEntry::ptr>& new_items, const std::vector<std::string>& keys_to_remove, const std::string& writer_name = ""); + IPAACA_HEADER_EXPORT void _modify_links(bool is_delta, const LinkMap& new_links, const LinkMap& links_to_remove, const std::string& writer_name = "") _IPAACA_OVERRIDE_; + IPAACA_HEADER_EXPORT void _modify_payload(bool is_delta, const std::map<std::string, PayloadDocumentEntry::ptr>& new_items, const std::vector<std::string>& keys_to_remove, const std::string& writer_name = "") _IPAACA_OVERRIDE_; protected: IPAACA_HEADER_EXPORT void _apply_update(IUPayloadUpdate::ptr update); IPAACA_HEADER_EXPORT void _apply_link_update(IULinkUpdate::ptr update); diff --git a/ipaacalib/cpp/include/ipaaca/ipaaca-payload.h b/ipaacalib/cpp/include/ipaaca/ipaaca-payload.h index 28f8024..7199a36 100644 --- a/ipaacalib/cpp/include/ipaaca/ipaaca-payload.h +++ b/ipaacalib/cpp/include/ipaaca/ipaaca-payload.h @@ -56,7 +56,8 @@ IPAACA_HEADER_EXPORT template<> void pack_into_json_value(rapidjson::Value&, rap IPAACA_HEADER_EXPORT template<> void pack_into_json_value(rapidjson::Value&, rapidjson::Document::AllocatorType&, bool); IPAACA_HEADER_EXPORT template<> void pack_into_json_value(rapidjson::Value&, rapidjson::Document::AllocatorType&, const std::string&); IPAACA_HEADER_EXPORT template<> void pack_into_json_value(rapidjson::Value&, rapidjson::Document::AllocatorType&, const char*); - +// helpers to set Value& from several standard containers containing the above standard types +/// set Value& from vector<T> IPAACA_HEADER_EXPORT template<typename T> void pack_into_json_value(rapidjson::Value& valueobject, rapidjson::Document::AllocatorType& allocator, const std::vector<T>& ts) { valueobject.SetArray(); @@ -66,6 +67,7 @@ IPAACA_HEADER_EXPORT template<typename T> void pack_into_json_value(rapidjson::V valueobject.PushBack(newv, allocator); } } +/// set Value& from list<T> IPAACA_HEADER_EXPORT template<typename T> void pack_into_json_value(rapidjson::Value& valueobject, rapidjson::Document::AllocatorType& allocator, const std::list<T>& ts) { valueobject.SetArray(); @@ -75,6 +77,7 @@ IPAACA_HEADER_EXPORT template<typename T> void pack_into_json_value(rapidjson::V valueobject.PushBack(newv, allocator); } } +/// set Value& from map<string, T> IPAACA_HEADER_EXPORT template<typename T> void pack_into_json_value(rapidjson::Value& valueobject, rapidjson::Document::AllocatorType& allocator, const std::map<std::string, T>& ts) { valueobject.SetObject(); @@ -94,6 +97,7 @@ IPAACA_HEADER_EXPORT template<> void pack_into_json_value(rapidjson::Value&, rap // FIXME TODO locking / invalidating proxy on first write of a payload entry IPAACA_HEADER_EXPORT class PayloadDocumentEntry//{{{ { + friend std::ostream& operator<<(std::ostream& os, std::shared_ptr<PayloadDocumentEntry> entry); public: IPAACA_MEMBER_VAR_EXPORT ipaaca::Lock lock; IPAACA_MEMBER_VAR_EXPORT bool modified; diff --git a/ipaacalib/cpp/include/ipaaca/ipaaca.h b/ipaacalib/cpp/include/ipaaca/ipaaca.h index f79e092..6a01f8a 100644 --- a/ipaacalib/cpp/include/ipaaca/ipaaca.h +++ b/ipaacalib/cpp/include/ipaaca/ipaaca.h @@ -108,6 +108,8 @@ /// marking pure virtual functions for extra readability #define _IPAACA_ABSTRACT_ +#define _IPAACA_OVERRIDE_ override + /// value to return when reading nonexistant payload keys #define IPAACA_PAYLOAD_DEFAULT_STRING_VALUE "" diff --git a/ipaacalib/cpp/src/ipaaca-buffers.cc b/ipaacalib/cpp/src/ipaaca-buffers.cc index 3600772..b6398a0 100644 --- a/ipaacalib/cpp/src/ipaaca-buffers.cc +++ b/ipaacalib/cpp/src/ipaaca-buffers.cc @@ -48,10 +48,10 @@ IPAACA_EXPORT std::ostream& operator<<(std::ostream& os, const IUPayloadUpdate& os << ", writer_name=" << obj.writer_name << ", is_delta=" << (obj.is_delta?"True":"False"); os << ", new_items = {"; bool first = true; - for (auto& : obj.new_items) { + for (auto& newit: obj.new_items) { if (first) { first=false; } else { os << ", "; } //os << "'" << it->first << "':'" << it->second << "'"; - os << "'" << it->first << "': ???"; // FIXME JSONIZE + os << "'" << newit.first << "': " << newit.second; } os << "}, keys_to_remove = ["; first = true; @@ -287,8 +287,8 @@ IPAACA_EXPORT OutputBuffer::OutputBuffer(const std::string& basename, const std: IPAACA_EXPORT void OutputBuffer::_initialize_server() { //IPAACA_INFO("Entering ...") - //IPAACA_INFO("Calling createServer(\"" << _unique_name << "\")") - _server = getFactory().createServer( Scope( _unique_name ) ); + //IPAACA_INFO("Calling createLocalServer(\"" << _unique_name << "\")") + _server = getFactory().createLocalServer( Scope( _unique_name ) ); //IPAACA_INFO("Registering methods") _server->registerMethod("updatePayload", Server::CallbackPtr(new CallbackIUPayloadUpdate(this))); _server->registerMethod("updateLinks", Server::CallbackPtr(new CallbackIULinkUpdate(this))); diff --git a/ipaacalib/cpp/src/ipaaca-ius.cc b/ipaacalib/cpp/src/ipaaca-ius.cc index 0d5c920..8a9aad1 100644 --- a/ipaacalib/cpp/src/ipaaca-ius.cc +++ b/ipaacalib/cpp/src/ipaaca-ius.cc @@ -95,7 +95,7 @@ IPAACA_EXPORT void IU::_modify_links(bool is_delta, const LinkMap& new_links, co -IPAACA_EXPORT void IU::_modify_payload(bool is_delta, const std::map<std::string, std::string>& new_items, const std::vector<std::string>& keys_to_remove, const std::string& writer_name) +IPAACA_EXPORT void IU::_modify_payload(bool is_delta, const std::map<std::string, PayloadDocumentEntry::ptr>& new_items, const std::vector<std::string>& keys_to_remove, const std::string& writer_name) { _revision_lock.lock(); if (_committed) { @@ -149,7 +149,7 @@ void Message::_modify_links(bool is_delta, const LinkMap& new_links, const LinkM IPAACA_INFO("Info: modifying a Message after sending has no global effects") } } -void Message::_modify_payload(bool is_delta, const std::map<std::string, std::string>& new_items, const std::vector<std::string>& keys_to_remove, const std::string& writer_name) +void Message::_modify_payload(bool is_delta, const std::map<std::string, PayloadDocumentEntry::ptr>& new_items, const std::vector<std::string>& keys_to_remove, const std::string& writer_name) { if (is_published()) { IPAACA_INFO("Info: modifying a Message after sending has no global effects") @@ -200,7 +200,7 @@ IPAACA_EXPORT void RemotePushIU::_modify_links(bool is_delta, const LinkMap& new _revision = *result; } } -IPAACA_EXPORT void RemotePushIU::_modify_payload(bool is_delta, const std::map<std::string, std::string>& new_items, const std::vector<std::string>& keys_to_remove, const std::string& writer_name) +IPAACA_EXPORT void RemotePushIU::_modify_payload(bool is_delta, const std::map<std::string, PayloadDocumentEntry::ptr>& new_items, const std::vector<std::string>& keys_to_remove, const std::string& writer_name) { //std::cout << "-- Sending a modify_payload with " << new_items.size() << " keys to merge." << std::endl; if (_committed) { @@ -263,12 +263,12 @@ IPAACA_EXPORT void RemotePushIU::_apply_update(IUPayloadUpdate::ptr update) for (std::vector<std::string>::const_iterator it=update->keys_to_remove.begin(); it!=update->keys_to_remove.end(); ++it) { _payload._remotely_enforced_delitem(*it); } - for (std::map<std::string, std::string>::const_iterator it=update->new_items.begin(); it!=update->new_items.end(); ++it) { + for (std::map<std::string, PayloadDocumentEntry::ptr>::const_iterator it=update->new_items.begin(); it!=update->new_items.end(); ++it) { _payload._remotely_enforced_setitem(it->first, it->second); } } else { _payload._remotely_enforced_wipe(); - for (std::map<std::string, std::string>::const_iterator it=update->new_items.begin(); it!=update->new_items.end(); ++it) { + for (std::map<std::string, PayloadDocumentEntry::ptr>::const_iterator it=update->new_items.begin(); it!=update->new_items.end(); ++it) { _payload._remotely_enforced_setitem(it->first, it->second); } } @@ -299,7 +299,7 @@ IPAACA_EXPORT void RemoteMessage::_modify_links(bool is_delta, const LinkMap& ne { IPAACA_INFO("Info: modifying a RemoteMessage only has local effects") } -IPAACA_EXPORT void RemoteMessage::_modify_payload(bool is_delta, const std::map<std::string, std::string>& new_items, const std::vector<std::string>& keys_to_remove, const std::string& writer_name) +IPAACA_EXPORT void RemoteMessage::_modify_payload(bool is_delta, const std::map<std::string, PayloadDocumentEntry::ptr>& new_items, const std::vector<std::string>& keys_to_remove, const std::string& writer_name) { IPAACA_INFO("Info: modifying a RemoteMessage only has local effects") } @@ -326,12 +326,12 @@ IPAACA_EXPORT void RemoteMessage::_apply_update(IUPayloadUpdate::ptr update) for (std::vector<std::string>::const_iterator it=update->keys_to_remove.begin(); it!=update->keys_to_remove.end(); ++it) { _payload._remotely_enforced_delitem(*it); } - for (std::map<std::string, std::string>::const_iterator it=update->new_items.begin(); it!=update->new_items.end(); ++it) { + for (std::map<std::string, PayloadDocumentEntry::ptr>::const_iterator it=update->new_items.begin(); it!=update->new_items.end(); ++it) { _payload._remotely_enforced_setitem(it->first, it->second); } } else { _payload._remotely_enforced_wipe(); - for (std::map<std::string, std::string>::const_iterator it=update->new_items.begin(); it!=update->new_items.end(); ++it) { + for (std::map<std::string, PayloadDocumentEntry::ptr>::const_iterator it=update->new_items.begin(); it!=update->new_items.end(); ++it) { _payload._remotely_enforced_setitem(it->first, it->second); } } diff --git a/ipaacalib/cpp/src/ipaaca-json.cc b/ipaacalib/cpp/src/ipaaca-json.cc index fc41425..fde7d20 100644 --- a/ipaacalib/cpp/src/ipaaca-json.cc +++ b/ipaacalib/cpp/src/ipaaca-json.cc @@ -39,8 +39,8 @@ using namespace rapidjson; using namespace std; -int main(int argc, char** argv) { - +int fakeiu_main(int argc, char** argv) +{ if (argc<2) { std::cout << "Please provide json content as the first argument." << std::endl; return 0; @@ -130,11 +130,6 @@ int main(int argc, char** argv) { std::cout << "(n/a)" << std::endl; } - //iu->payload()["b"] = "newEntry"; - - //std::vector<long> vs = { 10, 20, 30, 40 }; - //std::map<std::string, double> vs = { {"A", 10}, {"B", 20}, {"C", 30}, {"D", 40} }; - //ipaaca::pack_into_json_value(entry->document, entry->document.GetAllocator(), vs); std::cout << "Setting a value deep in the object:" << std::endl; iu->payload()["a"][0] = "set by pep::op="; //iu->payload()["a"]["A"] = "set by pep::op="; @@ -155,3 +150,18 @@ int main(int argc, char** argv) { // Done return 0; } + +int iu_main(int argc, char** argv) +{ + ipaaca::IU::ptr iu = ipaaca::IU::create("testcategory"); + std::map<std::string, long> newmap = { {"fifty", 50}, {"ninety-nine", 99} }; + iu->payload()["map"] = newmap; + iu->payload()["map"]["str_array"] = std::vector<std::string>{"str1", "str2"}; + return 0; +} + +int main(int argc, char** argv) +{ + //return fakeiu_main(argc, argv); + return iu_main(argc, argv); +} diff --git a/ipaacalib/cpp/src/ipaaca-payload.cc b/ipaacalib/cpp/src/ipaaca-payload.cc index f7b5e79..0026dc7 100644 --- a/ipaacalib/cpp/src/ipaaca-payload.cc +++ b/ipaacalib/cpp/src/ipaaca-payload.cc @@ -42,6 +42,19 @@ using namespace rsb::filter; using namespace rsb::converter; using namespace rsb::patterns; +IPAACA_EXPORT std::ostream& operator<<(std::ostream& os, const rapidjson::Value& val)//{{{ +{ + os << json_value_cast<std::string>(val); + return os; +} +//}}} +IPAACA_EXPORT std::ostream& operator<<(std::ostream& os, PayloadDocumentEntry::ptr entry)//{{{ +{ + os << json_value_cast<std::string>(entry->document); + return os; +} +//}}} + IPAACA_EXPORT std::ostream& operator<<(std::ostream& os, const Payload& obj)//{{{ { os << "{"; -- GitLab