From 775790fa1c830cadf2a721baac89d796707ad32e Mon Sep 17 00:00:00 2001 From: Ramin Yaghoubzadeh <ryaghoubzadeh@uni-bielefeld.de> Date: Thu, 5 Feb 2015 16:23:56 +0100 Subject: [PATCH] intermediate commit, not working --- ipaacalib/cpp/CMakeLists.txt | 20 +++++------ ipaacalib/cpp/include/ipaaca/ipaaca-buffers.h | 9 ++--- ipaacalib/cpp/include/ipaaca/ipaaca-payload.h | 18 +++++----- ipaacalib/cpp/src/ipaaca-buffers.cc | 7 ++-- ipaacalib/cpp/src/ipaaca-internal.cc | 9 +++-- ipaacalib/cpp/src/ipaaca-json.cc | 7 +++- ipaacalib/cpp/src/ipaaca-payload.cc | 36 ++++++++++--------- 7 files changed, 58 insertions(+), 48 deletions(-) diff --git a/ipaacalib/cpp/CMakeLists.txt b/ipaacalib/cpp/CMakeLists.txt index ed15d94..285676a 100644 --- a/ipaacalib/cpp/CMakeLists.txt +++ b/ipaacalib/cpp/CMakeLists.txt @@ -165,10 +165,10 @@ set (JSON_TEST_SOURCE -# compile all files to "ipaaca" shared library -add_library(ipaaca SHARED ${SOURCE}) -# and link all the required external libs (found above using find_package etc.) -target_link_libraries(ipaaca ${LIBS}) +## compile all files to "ipaaca" shared library +#add_library(ipaaca SHARED ${SOURCE}) +## and link all the required external libs (found above using find_package etc.) +#target_link_libraries(ipaaca ${LIBS}) add_executable (ipaaca-test-json ${JSON_TEST_SOURCE}) target_link_libraries (ipaaca-test-json ${LIBS}) @@ -178,12 +178,12 @@ set(DEFAULT_LIB_SUBDIR lib) set(DEFAULT_DATA_SUBDIR share/data) set(DEFAULT_INCLUDE_SUBDIR include) #set(CMAKE_INSTALL_PREFIX "") -install ( - TARGETS ipaaca - RUNTIME DESTINATION bin - LIBRARY DESTINATION lib - ARCHIVE DESTINATION lib - ) +#install ( +# TARGETS ipaaca +# RUNTIME DESTINATION bin +# LIBRARY DESTINATION lib +# ARCHIVE DESTINATION lib +# ) install( DIRECTORY include DESTINATION . diff --git a/ipaacalib/cpp/include/ipaaca/ipaaca-buffers.h b/ipaacalib/cpp/include/ipaaca/ipaaca-buffers.h index 2c4fe44..dd00eb9 100644 --- a/ipaacalib/cpp/include/ipaaca/ipaaca-buffers.h +++ b/ipaacalib/cpp/include/ipaaca/ipaaca-buffers.h @@ -145,7 +145,8 @@ IPAACA_HEADER_EXPORT class IUEventHandler {//{{{ IPAACA_HEADER_EXPORT _IPAACA_ABSTRACT_ virtual 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") = 0; - IPAACA_HEADER_EXPORT _IPAACA_ABSTRACT_ virtual void _send_iu_payload_update(IUInterface* iu, bool is_delta, revision_t revision, const std::map<std::string, std::string>& new_items, const std::vector<std::string>& keys_to_remove, const std::string& writer_name="undef") = 0; +// LAST POSITION OPENED FIXME + IPAACA_HEADER_EXPORT _IPAACA_ABSTRACT_ virtual 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") = 0; IPAACA_HEADER_EXPORT _IPAACA_ABSTRACT_ virtual void _send_iu_commission(IUInterface* iu, revision_t revision, const std::string& writer_name="undef") = 0; // IPAACA_HEADER_EXPORT _IPAACA_ABSTRACT_ virtual void _send_iu_resendrequest(IUInterface* iu, revision_t revision, const std::string& writer_name="undef") = 0; IPAACA_HEADER_EXPORT void _allocate_unique_name(const std::string& basename, const std::string& function); @@ -187,7 +188,7 @@ IPAACA_HEADER_EXPORT class IUEventHandler {//{{{ 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_payload_update(IUInterface* iu, bool is_delta, revision_t revision, const std::map<std::string, std::string>& new_items, const std::vector<std::string>& keys_to_remove, const std::string& writer_name="undef"); + 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_resendrequest(IUInterface* iu, revision_t revision, const std::string& writer_name); // remote access functions @@ -238,7 +239,7 @@ IPAACA_HEADER_EXPORT class IUEventHandler {//{{{ { 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, std::string>& 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, const rapidjson::Document&>& new_items, const std::vector<std::string>& keys_to_remove, const std::string& writer_name="undef") { IPAACA_WARNING("(ERROR) InputBuffer::_send_iu_payload_update() should never be invoked") } @@ -286,7 +287,7 @@ IPAACA_HEADER_EXPORT class IUEventHandler {//{{{ IPAACA_MEMBER_VAR_EXPORT revision_t revision; IPAACA_MEMBER_VAR_EXPORT std::string writer_name; IPAACA_MEMBER_VAR_EXPORT bool is_delta; - IPAACA_MEMBER_VAR_EXPORT std::map<std::string, std::string> new_items; + IPAACA_MEMBER_VAR_EXPORT std::map<std::string, const rapidjson::Document&> new_items; IPAACA_MEMBER_VAR_EXPORT std::vector<std::string> keys_to_remove; friend std::ostream& operator<<(std::ostream& os, const IUPayloadUpdate& obj); typedef boost::shared_ptr<IUPayloadUpdate> ptr; diff --git a/ipaacalib/cpp/include/ipaaca/ipaaca-payload.h b/ipaacalib/cpp/include/ipaaca/ipaaca-payload.h index 82873b9..3e9cebb 100644 --- a/ipaacalib/cpp/include/ipaaca/ipaaca-payload.h +++ b/ipaacalib/cpp/include/ipaaca/ipaaca-payload.h @@ -129,27 +129,27 @@ IPAACA_HEADER_EXPORT class Payload//{{{ friend class CallbackIUPayloadUpdate; protected: IPAACA_MEMBER_VAR_EXPORT std::string _owner_name; - IPAACA_MEMBER_VAR_EXPORT rapidjson::Document _json_document; - //IPAACA_MEMBER_VAR_EXPORT std::map<std::string, std::string> _store; + //IPAACA_MEMBER_VAR_EXPORT rapidjson::Document _json_document; + IPAACA_MEMBER_VAR_EXPORT std::map<std::string, rapidjson::Document> _json_store; IPAACA_MEMBER_VAR_EXPORT boost::weak_ptr<IUInterface> _iu; protected: IPAACA_HEADER_EXPORT void initialize(boost::shared_ptr<IUInterface> iu); IPAACA_HEADER_EXPORT inline void _set_owner_name(const std::string& name) { _owner_name = name; } IPAACA_HEADER_EXPORT void _remotely_enforced_wipe(); IPAACA_HEADER_EXPORT void _remotely_enforced_delitem(const std::string& k); - IPAACA_HEADER_EXPORT void _remotely_enforced_setitem(const std::string& k, const std::string& v); - IPAACA_HEADER_EXPORT void _internal_replace_all(const std::map<std::string, std::string>& new_contents, const std::string& writer_name=""); - IPAACA_HEADER_EXPORT void _internal_merge(const std::map<std::string, std::string>& contents_to_merge, const std::string& writer_name=""); - IPAACA_HEADER_EXPORT void _internal_set(const std::string& k, const std::string& v, const std::string& writer_name=""); + IPAACA_HEADER_EXPORT void _remotely_enforced_setitem(const std::string& k, const rapidjson::Document& v); + IPAACA_HEADER_EXPORT void _internal_replace_all(const std::map<std::string, const rapidjson::Document&>& new_contents, const std::string& writer_name=""); + IPAACA_HEADER_EXPORT void _internal_merge(const std::map<std::string, const rapidjson::Document&>& contents_to_merge, const std::string& writer_name=""); + IPAACA_HEADER_EXPORT void _internal_set(const std::string& k, const rapidjson::Document& v, const std::string& writer_name=""); IPAACA_HEADER_EXPORT void _internal_remove(const std::string& k, const std::string& writer_name=""); public: IPAACA_HEADER_EXPORT inline const std::string& owner_name() { return _owner_name; } // access IPAACA_HEADER_EXPORT PayloadEntryProxy operator[](const std::string& key); IPAACA_HEADER_EXPORT operator std::map<std::string, std::string>(); - IPAACA_HEADER_EXPORT inline void set(const std::map<std::string, std::string>& all_elems) { _internal_replace_all(all_elems); } - IPAACA_HEADER_EXPORT inline void set(const std::string& k, const std::string& v) { _internal_set(k, v); } - IPAACA_HEADER_EXPORT inline void merge(const std::map<std::string, std::string>& elems_to_merge) { _internal_merge(elems_to_merge); } + IPAACA_HEADER_EXPORT inline void set(const std::map<std::string, const rapidjson::Document&>& all_elems) { _internal_replace_all(all_elems); } + IPAACA_HEADER_EXPORT inline void set(const std::string& k, const rapidjson::Document& v) { _internal_set(k, v); } + IPAACA_HEADER_EXPORT inline void merge(const std::map<std::string, const rapidjson::Document&>& elems_to_merge) { _internal_merge(elems_to_merge); } IPAACA_HEADER_EXPORT inline void remove(const std::string& k) { _internal_remove(k); } IPAACA_HEADER_EXPORT std::string get(const std::string& k); typedef boost::shared_ptr<Payload> ptr; diff --git a/ipaacalib/cpp/src/ipaaca-buffers.cc b/ipaacalib/cpp/src/ipaaca-buffers.cc index a738e6d..91a66e2 100644 --- a/ipaacalib/cpp/src/ipaaca-buffers.cc +++ b/ipaacalib/cpp/src/ipaaca-buffers.cc @@ -66,9 +66,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 (std::map<std::string, std::string>::const_iterator it=obj.new_items.begin(); it!=obj.new_items.end(); ++it) { + for (auto& : obj.new_items) { if (first) { first=false; } else { os << ", "; } - os << "'" << it->first << "':'" << it->second << "'"; + //os << "'" << it->first << "':'" << it->second << "'"; + os << "'" << it->first << "': ???"; // FIXME JSONIZE } os << "}, keys_to_remove = ["; first = true; @@ -391,7 +392,7 @@ IPAACA_EXPORT void OutputBuffer::_send_iu_link_update(IUInterface* iu, bool is_d informer->publish(ldata); } -IPAACA_EXPORT void OutputBuffer::_send_iu_payload_update(IUInterface* iu, bool is_delta, revision_t revision, 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 OutputBuffer::_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) { IUPayloadUpdate* pup = new ipaaca::IUPayloadUpdate(); Informer<ipaaca::IUPayloadUpdate>::DataPtr pdata(pup); diff --git a/ipaacalib/cpp/src/ipaaca-internal.cc b/ipaacalib/cpp/src/ipaaca-internal.cc index 0b49fed..fe89565 100644 --- a/ipaacalib/cpp/src/ipaaca-internal.cc +++ b/ipaacalib/cpp/src/ipaaca-internal.cc @@ -168,12 +168,11 @@ IPAACA_EXPORT std::string IUConverter::serialize(const AnnotatedData& data, std: } pbo->set_access_mode(a_m); pbo->set_read_only(obj->read_only()); - // TODO JSONIZE - for (std::map<std::string, std::string>::const_iterator it=obj->_payload._store.begin(); it!=obj->_payload._store.end(); ++it) { + for (auto& kv: obj->_payload._store) { protobuf::PayloadItem* item = pbo->add_payload(); - item->set_key(it->first); - item->set_value(it->second); - item->set_type("str"); // FIXME other types than str (later) + item->set_key(kv.first); + item->set_value(kv.second); + item->set_type("json"); } for (LinkMap::const_iterator it=obj->_links._links.begin(); it!=obj->_links._links.end(); ++it) { protobuf::LinkSet* links = pbo->add_links(); diff --git a/ipaacalib/cpp/src/ipaaca-json.cc b/ipaacalib/cpp/src/ipaaca-json.cc index de9ff66..929e803 100644 --- a/ipaacalib/cpp/src/ipaaca-json.cc +++ b/ipaacalib/cpp/src/ipaaca-json.cc @@ -45,11 +45,16 @@ int main(int, char*[]) { puts("WARNING - no c++11 rvalue refs!"); #endif + std::map<std::string, Document> documents; //////////////////////////////////////////////////////////////////////////// // 1. Parse a JSON text string to a document. const char json[] = " { \"hello\" : \"world\", \"t\" : true , \"f\" : false, \"n\": null, \"i\":123, \"pi\": 3.1416, \"a\":[1, 2, 3, 4], \"dict\":{\"s\":\"stringvalue\", \"arr\":[6, 7, \"test\"]} } "; printf("Original JSON:\n %s\n", json); - Document document; // Default template parameter uses UTF8 and MemoryPoolAllocator. + Document _document; // Default template parameter uses UTF8 and MemoryPoolAllocator. + documents["document_test"] = std::move(_document); + Document& document = documents["document_test"]; + printf("Check whether document contains 'none' initially ..."); + assert(document.IsNull()); // initial state of object #if 0 // "normal" parsing, decode strings to new buffers. Can use other input stream via ParseStream(). if (document.Parse(json).HasParseError()) diff --git a/ipaacalib/cpp/src/ipaaca-payload.cc b/ipaacalib/cpp/src/ipaaca-payload.cc index 23574f4..baba2cf 100644 --- a/ipaacalib/cpp/src/ipaaca-payload.cc +++ b/ipaacalib/cpp/src/ipaaca-payload.cc @@ -44,7 +44,7 @@ IPAACA_EXPORT std::ostream& operator<<(std::ostream& os, const Payload& obj)//{{ { os << "{"; bool first = true; - for (std::map<std::string, std::string>::const_iterator it=obj._store.begin(); it!=obj._store.end(); ++it) { + for (std::map<std::string, std::string>::const_iterator it=obj._json_store.begin(); it!=obj._json_store.end(); ++it) { if (first) { first=false; } else { os << ", "; } os << "'" << it->first << "':'" << it->second << "'"; } @@ -173,53 +173,57 @@ IPAACA_EXPORT PayloadEntryProxy Payload::operator[](const std::string& key) } IPAACA_EXPORT Payload::operator std::map<std::string, std::string>() { - return _store; + std::map<std::string, std::string> result; + std::foreach(_json_store.begin(), _json_store.end(), [&result](auto pair) { + result[pair.first] = pair.second.GetString(); + }); + return result; } -IPAACA_EXPORT void Payload::_internal_set(const std::string& k, const std::string& v, const std::string& writer_name) { - std::map<std::string, std::string> _new; +IPAACA_EXPORT void Payload::_internal_set(const std::string& k, const rapidjson::Document& v, const std::string& writer_name) { + std::map<std::string, const rapidjson::Document&> _new; std::vector<std::string> _remove; _new[k]=v; _iu.lock()->_modify_payload(true, _new, _remove, writer_name ); - _store[k] = v; + _json_store[k] = v; } IPAACA_EXPORT void Payload::_internal_remove(const std::string& k, const std::string& writer_name) { - std::map<std::string, std::string> _new; + std::map<std::string, const rapidjson::Document&> _new; std::vector<std::string> _remove; _remove.push_back(k); _iu.lock()->_modify_payload(true, _new, _remove, writer_name ); _store.erase(k); } -IPAACA_EXPORT void Payload::_internal_replace_all(const std::map<std::string, std::string>& new_contents, const std::string& writer_name) +IPAACA_EXPORT void Payload::_internal_replace_all(const std::map<std::string, const rapidjson::Document&>& new_contents, const std::string& writer_name) { std::vector<std::string> _remove; _iu.lock()->_modify_payload(false, new_contents, _remove, writer_name ); _store = new_contents; } -IPAACA_EXPORT void Payload::_internal_merge(const std::map<std::string, std::string>& contents_to_merge, const std::string& writer_name) +IPAACA_EXPORT void Payload::_internal_merge(const std::map<std::string, const rapidjson::Document&>& contents_to_merge, const std::string& writer_name) { std::vector<std::string> _remove; _iu.lock()->_modify_payload(true, contents_to_merge, _remove, writer_name ); - _store.insert(contents_to_merge.begin(), contents_to_merge.end()); + _json_store.insert(contents_to_merge.begin(), contents_to_merge.end()); //for (std::map<std::string, std::string>::iterator it = contents_to_merge.begin(); it!=contents_to_merge.end(); i++) { // _store[it->first] = it->second; //} } -IPAACA_EXPORT inline std::string Payload::get(const std::string& k) { - if (_store.count(k)>0) return _store[k]; - else return IPAACA_PAYLOAD_DEFAULT_STRING_VALUE; +IPAACA_EXPORT inline rapidjson::Document& Payload::get(const std::string& k) { + if (_json_store.count(k)>0) return _json_store[k]; + else return rapidjson::Document(); // if not found; contains 'null' value } IPAACA_EXPORT void Payload::_remotely_enforced_wipe() { - _store.clear(); + _json_store.clear(); } IPAACA_EXPORT void Payload::_remotely_enforced_delitem(const std::string& k) { - _store.erase(k); + _json_store.erase(k); } -IPAACA_EXPORT void Payload::_remotely_enforced_setitem(const std::string& k, const std::string& v) +IPAACA_EXPORT void Payload::_remotely_enforced_setitem(const std::string& k, const rapidjson::Document&) { - _store[k] = v; + _json_store[k] = v; } //}}} -- GitLab