From 05a29b0a4e9cee49de41e84b6f1f14df7bbe6419 Mon Sep 17 00:00:00 2001 From: Ramin Yaghoubzadeh <ryaghoubzadeh@uni-bielefeld.de> Date: Tue, 24 Feb 2015 00:18:27 +0100 Subject: [PATCH] C++: global static default options, some already settable via cmdline Setting default channel name and default payload type works OK --- ipaacalib/cpp/include/ipaaca/ipaaca-buffers.h | 14 +++++++------- ipaacalib/cpp/include/ipaaca/ipaaca-ius.h | 14 +++++++------- ipaacalib/cpp/include/ipaaca/ipaaca.h | 4 ++++ ipaacalib/cpp/src/ipaaca-buffers.cc | 14 +++++++------- ipaacalib/cpp/src/ipaaca-cmdline-parser.cc | 15 +++++++++++---- ipaacalib/cpp/src/ipaaca-ius.cc | 8 ++++---- ipaacalib/cpp/src/ipaaca-json.cc | 8 ++++---- ipaacalib/cpp/src/ipaaca.cc | 3 +++ 8 files changed, 47 insertions(+), 33 deletions(-) diff --git a/ipaacalib/cpp/include/ipaaca/ipaaca-buffers.h b/ipaacalib/cpp/include/ipaaca/ipaaca-buffers.h index 124cb19..fe3f6d3 100644 --- a/ipaacalib/cpp/include/ipaaca/ipaaca-buffers.h +++ b/ipaacalib/cpp/include/ipaaca/ipaaca-buffers.h @@ -77,10 +77,10 @@ IPAACA_HEADER_EXPORT class BufferConfiguration//{{{ IPAACA_MEMBER_VAR_EXPORT std::vector<std::string> _category_interests; IPAACA_MEMBER_VAR_EXPORT std::string _channel; public: - IPAACA_HEADER_EXPORT inline BufferConfiguration(const std::string basename) { _basename = basename; } - IPAACA_HEADER_EXPORT inline const std::string get_basename() const { return _basename; } - IPAACA_HEADER_EXPORT inline const std::vector<std::string> get_category_interests() const { return _category_interests; } - IPAACA_HEADER_EXPORT inline const std::string get_channel() const { return _channel; } + IPAACA_HEADER_EXPORT inline BufferConfiguration(const std::string& basename): _basename(basename), _channel(__ipaaca_static_option_default_channel) { } + IPAACA_HEADER_EXPORT inline const std::string& get_basename() const { return _basename; } + IPAACA_HEADER_EXPORT inline const std::vector<std::string>& get_category_interests() const { return _category_interests; } + IPAACA_HEADER_EXPORT inline const std::string& get_channel() const { return _channel; } public: // setters, initialization helpers IPAACA_HEADER_EXPORT inline BufferConfiguration& set_basename(const std::string& basename) { _basename = basename; return *this; } @@ -92,7 +92,7 @@ IPAACA_HEADER_EXPORT class BufferConfigurationBuilder: private BufferConfigurati { public: [[deprecated("Use setters in BufferConfiguration instead of the Builder")]] - IPAACA_HEADER_EXPORT inline BufferConfigurationBuilder(const std::string basename):BufferConfiguration(basename) {} + IPAACA_HEADER_EXPORT inline BufferConfigurationBuilder(const std::string& basename): BufferConfiguration(basename) {} IPAACA_HEADER_EXPORT inline void set_basename(const std::string& basename) { _basename = basename; @@ -157,7 +157,7 @@ IPAACA_HEADER_EXPORT class Buffer { //: public boost::enable_shared_from_this<Bu IPAACA_HEADER_EXPORT void _allocate_unique_name(const std::string& basename, const std::string& function); IPAACA_HEADER_EXPORT inline Buffer(const std::string& basename, const std::string& function) { _allocate_unique_name(basename, function); - _channel = "default"; + _channel = __ipaaca_static_option_default_channel; } IPAACA_HEADER_EXPORT void call_iu_event_handlers(boost::shared_ptr<IUInterface> iu, bool local, IUEventType event_type, const std::string& category); public: @@ -204,7 +204,7 @@ IPAACA_HEADER_EXPORT class OutputBuffer: public Buffer { //, public boost::enabl IPAACA_HEADER_EXPORT void _retract_iu(boost::shared_ptr<IU> iu); protected: - IPAACA_HEADER_EXPORT OutputBuffer(const std::string& basename, const std::string& channel="default"); + IPAACA_HEADER_EXPORT OutputBuffer(const std::string& basename, const std::string& channel=""); // empty string auto-replaced with __ipaaca_static_option_default_channel IPAACA_HEADER_EXPORT void _initialize_server(); public: IPAACA_HEADER_EXPORT static boost::shared_ptr<OutputBuffer> create(const std::string& basename); diff --git a/ipaacalib/cpp/include/ipaaca/ipaaca-ius.h b/ipaacalib/cpp/include/ipaaca/ipaaca-ius.h index 5affdde..ec2e11f 100644 --- a/ipaacalib/cpp/include/ipaaca/ipaaca-ius.h +++ b/ipaacalib/cpp/include/ipaaca/ipaaca-ius.h @@ -51,7 +51,7 @@ IPAACA_HEADER_EXPORT class IUInterface {//{{{ IPAACA_MEMBER_VAR_EXPORT std::string _uid; IPAACA_MEMBER_VAR_EXPORT revision_t _revision; IPAACA_MEMBER_VAR_EXPORT std::string _category; - IPAACA_MEMBER_VAR_EXPORT std::string _payload_type; // default is "JSON" (legacy said "MAP") + IPAACA_MEMBER_VAR_EXPORT std::string _payload_type; // default is taken from __ipaaca_static_option_default_payload_type IPAACA_MEMBER_VAR_EXPORT std::string _owner_name; IPAACA_MEMBER_VAR_EXPORT bool _committed; IPAACA_MEMBER_VAR_EXPORT bool _retracted; @@ -122,14 +122,14 @@ IPAACA_HEADER_EXPORT class IU: public IUInterface {//{{{ IPAACA_MEMBER_VAR_EXPORT Lock _revision_lock; protected: IPAACA_HEADER_EXPORT inline void _increase_revision_number() { _revision++; } - IPAACA_HEADER_EXPORT IU(const std::string& category, IUAccessMode access_mode=IU_ACCESS_PUSH, bool read_only=false, const std::string& payload_type="JSON" ); + IPAACA_HEADER_EXPORT IU(const std::string& category, IUAccessMode access_mode=IU_ACCESS_PUSH, bool read_only=false, const std::string& payload_type="" ); // __ipaaca_static_option_default_payload_type public: IPAACA_HEADER_EXPORT inline ~IU() { //IPAACA_IMPLEMENT_ME } [[deprecated("Please use the new argument order: category, payload_type, read_only")]] - IPAACA_HEADER_EXPORT static boost::shared_ptr<IU> create(const std::string& category, IUAccessMode access_mode, bool read_only=false, const std::string& payload_type="JSON" ); - IPAACA_HEADER_EXPORT static boost::shared_ptr<IU> create(const std::string& category, const std::string& payload_type="JSON", bool read_only=false); + IPAACA_HEADER_EXPORT static boost::shared_ptr<IU> create(const std::string& category, IUAccessMode access_mode, bool read_only=false, const std::string& payload_type="" ); + IPAACA_HEADER_EXPORT static boost::shared_ptr<IU> create(const std::string& category, const std::string& payload_type="", bool read_only=false); 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_; @@ -153,14 +153,14 @@ IPAACA_HEADER_EXPORT class Message: public IU {//{{{ friend class CallbackIUCommission; friend class CallbackIUResendRequest; protected: - IPAACA_HEADER_EXPORT Message(const std::string& category, IUAccessMode access_mode=IU_ACCESS_MESSAGE, bool read_only=true, const std::string& payload_type="JSON" ); + IPAACA_HEADER_EXPORT Message(const std::string& category, IUAccessMode access_mode=IU_ACCESS_MESSAGE, bool read_only=true, const std::string& payload_type="" ); public: IPAACA_HEADER_EXPORT inline ~Message() { //IPAACA_IMPLEMENT_ME } [[deprecated("Please use the new argument order: category, payload_type")]] - IPAACA_HEADER_EXPORT static boost::shared_ptr<Message> create(const std::string& category, IUAccessMode access_mode, bool read_only=true, const std::string& payload_type="JSON" ); - IPAACA_HEADER_EXPORT static boost::shared_ptr<Message> create(const std::string& category, const std::string& payload_type="JSON"); + IPAACA_HEADER_EXPORT static boost::shared_ptr<Message> create(const std::string& category, IUAccessMode access_mode, bool read_only=true, const std::string& payload_type="" ); + IPAACA_HEADER_EXPORT static boost::shared_ptr<Message> create(const std::string& category, const std::string& payload_type=""); 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_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_; diff --git a/ipaacalib/cpp/include/ipaaca/ipaaca.h b/ipaacalib/cpp/include/ipaaca/ipaaca.h index 35620e5..6be8178 100644 --- a/ipaacalib/cpp/include/ipaaca/ipaaca.h +++ b/ipaacalib/cpp/include/ipaaca/ipaaca.h @@ -167,6 +167,10 @@ namespace ipaaca { #include <ipaaca/ipaaca-locking.h> +// Global static library variables (run-time default configuration) +// Actual initial values are set in ipaaca.cc +IPAACA_MEMBER_VAR_EXPORT extern std::string __ipaaca_static_option_default_payload_type; +IPAACA_MEMBER_VAR_EXPORT extern std::string __ipaaca_static_option_default_channel; IPAACA_MEMBER_VAR_EXPORT Lock& logger_lock(); diff --git a/ipaacalib/cpp/src/ipaaca-buffers.cc b/ipaacalib/cpp/src/ipaaca-buffers.cc index 38ac203..1c4ad97 100644 --- a/ipaacalib/cpp/src/ipaaca-buffers.cc +++ b/ipaacalib/cpp/src/ipaaca-buffers.cc @@ -282,7 +282,7 @@ IPAACA_EXPORT OutputBuffer::OutputBuffer(const std::string& basename, const std: { //IPAACA_INFO("Entering ...") _id_prefix = _basename + "-" + _uuid + "-IU-"; - _channel = channel; + _channel = (channel=="") ? __ipaaca_static_option_default_channel: channel; _initialize_server(); //IPAACA_INFO("... exiting.") } @@ -456,7 +456,7 @@ IPAACA_EXPORT InputBuffer::InputBuffer(const BufferConfiguration& bufferconfigur IPAACA_EXPORT InputBuffer::InputBuffer(const std::string& basename, const std::set<std::string>& category_interests) :Buffer(basename, "IB") { - _channel = "default"; + _channel = __ipaaca_static_option_default_channel; for (std::set<std::string>::const_iterator it=category_interests.begin(); it!=category_interests.end(); ++it) { _create_category_listener_if_needed(*it); @@ -467,7 +467,7 @@ IPAACA_EXPORT InputBuffer::InputBuffer(const std::string& basename, const std::s IPAACA_EXPORT InputBuffer::InputBuffer(const std::string& basename, const std::vector<std::string>& category_interests) :Buffer(basename, "IB") { - _channel = "default"; + _channel = __ipaaca_static_option_default_channel; for (std::vector<std::string>::const_iterator it=category_interests.begin(); it!=category_interests.end(); ++it) { _create_category_listener_if_needed(*it); @@ -478,7 +478,7 @@ IPAACA_EXPORT InputBuffer::InputBuffer(const std::string& basename, const std::v IPAACA_EXPORT InputBuffer::InputBuffer(const std::string& basename, const std::string& category_interest1) :Buffer(basename, "IB") { - _channel = "default"; + _channel = __ipaaca_static_option_default_channel; _create_category_listener_if_needed(category_interest1); _create_category_listener_if_needed(_uuid); @@ -487,7 +487,7 @@ IPAACA_EXPORT InputBuffer::InputBuffer(const std::string& basename, const std::s IPAACA_EXPORT InputBuffer::InputBuffer(const std::string& basename, const std::string& category_interest1, const std::string& category_interest2) :Buffer(basename, "IB") { - _channel = "default"; + _channel = __ipaaca_static_option_default_channel; _create_category_listener_if_needed(category_interest1); _create_category_listener_if_needed(category_interest2); @@ -497,7 +497,7 @@ IPAACA_EXPORT InputBuffer::InputBuffer(const std::string& basename, const std::s IPAACA_EXPORT InputBuffer::InputBuffer(const std::string& basename, const std::string& category_interest1, const std::string& category_interest2, const std::string& category_interest3) :Buffer(basename, "IB") { - _channel = "default"; + _channel = __ipaaca_static_option_default_channel; _create_category_listener_if_needed(category_interest1); _create_category_listener_if_needed(category_interest2); @@ -508,7 +508,7 @@ IPAACA_EXPORT InputBuffer::InputBuffer(const std::string& basename, const std::s IPAACA_EXPORT InputBuffer::InputBuffer(const std::string& basename, const std::string& category_interest1, const std::string& category_interest2, const std::string& category_interest3, const std::string& category_interest4) :Buffer(basename, "IB") { - _channel = "default"; + _channel = __ipaaca_static_option_default_channel; _create_category_listener_if_needed(category_interest1); _create_category_listener_if_needed(category_interest2); diff --git a/ipaacalib/cpp/src/ipaaca-cmdline-parser.cc b/ipaacalib/cpp/src/ipaaca-cmdline-parser.cc index 0a50abf..89ae559 100644 --- a/ipaacalib/cpp/src/ipaaca-cmdline-parser.cc +++ b/ipaacalib/cpp/src/ipaaca-cmdline-parser.cc @@ -98,11 +98,18 @@ bool CommandLineParser::consume_library_option(const std::string& name, bool exp { IPAACA_DEBUG("Trying to consume " << name) if (name=="ipaaca-payload-type") { - IPAACA_DEBUG("TODO: set default payload type to " << optarg) - IPAACA_IMPLEMENT_ME + std::string newtype = optarg; + if (newtype=="MAP") newtype="STR"; + if ((newtype=="JSON") || (newtype=="STR")) { + IPAACA_DEBUG("Setting default payload type " << newtype) + __ipaaca_static_option_default_payload_type = newtype; + } else { + IPAACA_WARNING("Ignoring unknown default payload type " << newtype << " - should be one of JSON or STR") + } } else if (name=="ipaaca-default-channel") { - IPAACA_DEBUG("TODO: set default channel to " << optarg) - IPAACA_IMPLEMENT_ME + std::string newch = optarg; + IPAACA_DEBUG("Setting default channel " << newch) + __ipaaca_static_option_default_channel = newch; } else if (name=="ipaaca-enable-logging") { IPAACA_DEBUG("TODO: set ipaaca log level to " << optarg) IPAACA_IMPLEMENT_ME diff --git a/ipaacalib/cpp/src/ipaaca-ius.cc b/ipaacalib/cpp/src/ipaaca-ius.cc index 9e9acf2..fa1efb4 100644 --- a/ipaacalib/cpp/src/ipaaca-ius.cc +++ b/ipaacalib/cpp/src/ipaaca-ius.cc @@ -47,7 +47,7 @@ IPAACA_EXPORT IU::ptr IU::create(const std::string& category, IUAccessMode acces } IPAACA_EXPORT IU::ptr IU::create(const std::string& category, const std::string& payload_type, bool read_only) { - IU::ptr iu = IU::ptr(new IU(category, IU_ACCESS_PUSH, read_only, payload_type)); /* params */ //)); + IU::ptr iu = IU::ptr(new IU(category, IU_ACCESS_PUSH, read_only, (payload_type=="")?__ipaaca_static_option_default_payload_type:payload_type)); /* params */ //)); iu->_payload.initialize(iu); return iu; } @@ -57,7 +57,7 @@ IPAACA_EXPORT IU::IU(const std::string& category, IUAccessMode access_mode, bool _revision = 1; _uid = ipaaca::generate_uuid_string(); _category = category; - _payload_type = payload_type; + _payload_type = (payload_type=="")?__ipaaca_static_option_default_payload_type:payload_type; // payload initialization deferred to IU::create(), above _read_only = read_only; _access_mode = access_mode; @@ -138,11 +138,11 @@ IPAACA_EXPORT void IU::_internal_commit(const std::string& writer_name) // Message//{{{ Message::ptr Message::create(const std::string& category, IUAccessMode access_mode, bool read_only, const std::string& payload_type) { - return Message::create(category, payload_type); + return Message::create(category, (payload_type=="")?__ipaaca_static_option_default_payload_type:payload_type); } Message::ptr Message::create(const std::string& category, const std::string& payload_type) { - Message::ptr iu = Message::ptr(new Message(category, IU_ACCESS_MESSAGE, true, payload_type)); /* params */ //)); + Message::ptr iu = Message::ptr(new Message(category, IU_ACCESS_MESSAGE, true, (payload_type=="")?__ipaaca_static_option_default_payload_type:payload_type)); /* params */ //)); iu->_payload.initialize(iu); return iu; } diff --git a/ipaacalib/cpp/src/ipaaca-json.cc b/ipaacalib/cpp/src/ipaaca-json.cc index 8ceec93..3ffcebc 100644 --- a/ipaacalib/cpp/src/ipaaca-json.cc +++ b/ipaacalib/cpp/src/ipaaca-json.cc @@ -46,9 +46,6 @@ int fakeiu_main(int argc, char** argv) // return 0; //} // - ipaaca::CommandLineParser::ptr parser = ipaaca::CommandLineParser::create(); - ipaaca::CommandLineOptions::ptr options = parser->parse(argc, argv); - std::string json_source("[\"old\",2,3,4]"); ipaaca::PayloadDocumentEntry::ptr entry = ipaaca::PayloadDocumentEntry::from_json_string_representation(json_source); @@ -186,7 +183,7 @@ int legacy_iu_main(int argc, char** argv) std::cout << "Received remote update, new payload: " << iu->payload() << std::endl; }); std::cout << "--- Create IUs with category jsonTest" << std::endl; - ipaaca::IU::ptr iu1 = ipaaca::IU::create("jsonTest", "JSON"); + ipaaca::IU::ptr iu1 = ipaaca::IU::create("jsonTest"); ipaaca::IU::ptr iu2 = ipaaca::IU::create("jsonTest", "STR"); std::map<std::string, long> newmap = { {"fifty", 50}, {"ninety-nine", 99} }; std::cout << "--- Set map" << std::endl; @@ -254,6 +251,9 @@ int iu_main(int argc, char** argv) int main(int argc, char** argv) { + ipaaca::CommandLineParser::ptr parser = ipaaca::CommandLineParser::create(); + ipaaca::CommandLineOptions::ptr options = parser->parse(argc, argv); + return legacy_iu_main(argc, argv); //return fakeiu_main(argc, argv); //return iu_main(argc, argv); diff --git a/ipaacalib/cpp/src/ipaaca.cc b/ipaacalib/cpp/src/ipaaca.cc index a6a092f..f72857e 100644 --- a/ipaacalib/cpp/src/ipaaca.cc +++ b/ipaacalib/cpp/src/ipaaca.cc @@ -72,6 +72,9 @@ IPAACA_EXPORT std::string generate_uuid_string()//{{{ #endif }//}}} +IPAACA_EXPORT std::string __ipaaca_static_option_default_payload_type("JSON"); +IPAACA_EXPORT std::string __ipaaca_static_option_default_channel("default"); + /* void init_inprocess_too() { //ParticipantConfig config = getFactory().getDefaultParticipantConfig(); -- GitLab