Skip to content

Commit

Permalink
Merge pull request #307 from jwillemsen/jwi-mapostream
Browse files Browse the repository at this point in the history
Add support for IDL::map ostream insertion for logging purposes. Mino…
  • Loading branch information
jwillemsen authored Aug 9, 2023
2 parents 6e5a2e7 + c9656b0 commit 3f72271
Show file tree
Hide file tree
Showing 7 changed files with 115 additions and 21 deletions.
6 changes: 3 additions & 3 deletions tao/x11/bounded_map_t.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
#if !defined (__IDL__BOUNDED_MAP_T_H_INCLUDED__)
#define __IDL__BOUNDED_MAP_T_H_INCLUDED__

#include <vector>
#include <map>
#include <initializer_list>
#include "tao/x11/versioned_x11_namespace.h"

Expand All @@ -38,8 +38,8 @@ namespace TAOX11_NAMESPACE
using const_reference = typename _Map::const_reference;
using iterator = typename _Map::iterator;
using const_iterator = typename _Map::const_iterator;
using const_reverse_iterator = std::reverse_iterator<const_iterator>;
using reverse_iterator = std::reverse_iterator<iterator>;
using const_reverse_iterator = typename _Map::const_reverse_iterator;
using reverse_iterator = typename _Map::reverse_iterator;
using size_type = size_t;
using difference_type = std::ptrdiff_t;
using allocator_type = _Alloc;
Expand Down
4 changes: 2 additions & 2 deletions tao/x11/bounded_vector_t.h
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,8 @@ namespace TAOX11_NAMESPACE
using const_reference = typename _Vector::const_reference;
using iterator = typename _Vector::iterator;
using const_iterator = typename _Vector::const_iterator;
using const_reverse_iterator = std::reverse_iterator<const_iterator>;
using reverse_iterator = std::reverse_iterator<iterator>;
using const_reverse_iterator = typename _Vector::const_reverse_iterator;
using reverse_iterator = typename _Vector::reverse_iterator;
using size_type = size_t;
using difference_type = std::ptrdiff_t;
using allocator_type = _Alloc;
Expand Down
97 changes: 91 additions & 6 deletions tao/x11/idl_traits_t.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@

#include "tao/x11/stddef.h"
#include "tao/x11/bounded_vector_t.h"
#include "tao/x11/bounded_map_t.h"

namespace TAOX11_NAMESPACE
{
Expand Down Expand Up @@ -222,8 +223,8 @@ namespace TAOX11_NAMESPACE
else
{
os_ << '<';
std::for_each (val_.begin (),
val_.end () -1,
std::for_each (val_.cbegin (),
--val_.cend (),
element_formatter<typename elem_traits::value_type> (os_));
elem_traits::write_on (os_, val_.back ());
os_ << '>';
Expand Down Expand Up @@ -260,8 +261,8 @@ namespace TAOX11_NAMESPACE
else
{
os_ << '<';
std::for_each (val_.begin (),
val_.end () -1,
std::for_each (val_.cbegin (),
--val_.cend (),
element_formatter<typename elem_traits::value_type> (os_));
elem_traits::write_on (os_, val_.back ());
os_ << '>';
Expand All @@ -270,6 +271,90 @@ namespace TAOX11_NAMESPACE
}
};

template <typename X, typename Y, typename OStrm_>
struct formatter<std::map<X,Y>, OStrm_>
{
using traits = IDL::traits<std::map<X,Y>>;
using elem_traits = typename std::map<X,Y>::value_type;
using key_traits = IDL::traits<X>;
using value_traits = IDL::traits<Y>;

template <typename T_ELEM>
struct element_formatter
{
OStrm_& os_;
element_formatter (OStrm_& os)
: os_ (os) {}

inline OStrm_& operator ()(elem_traits el_)
{ this->os_ << "<"; key_traits::write_on (this->os_, el_.first) << ','; value_traits::write_on (this->os_, el_.second) << ">"; return os_; }
};

inline OStrm_& operator ()(
OStrm_& os_,
typename traits::in_type val_)
{
if (val_.empty ())
{
os_ << "<>";
}
else
{
os_ << '<';
std::for_each (val_.cbegin (),
--val_.cend (),
element_formatter<elem_traits> (os_));
os_ << "<";
key_traits::write_on (os_, (--val_.cend ())->first) << ",";
value_traits::write_on (os_, (--val_.cend ())->second);
os_ << ">>";
}
return os_;
}
};

template <typename X, typename Y, typename OStrm_, const uint32_t B>
struct formatter<IDL::bounded_map<X, Y, B>, OStrm_>
{
using traits = IDL::traits<IDL::bounded_map<X, Y, B>>;
using elem_traits = typename IDL::bounded_map<X,Y,B>::value_type;
using key_traits = IDL::traits<X>;
using value_traits = IDL::traits<Y>;

template <typename T_ELEM>
struct element_formatter
{
OStrm_& os_;
element_formatter (OStrm_& os)
: os_ (os) {}

inline OStrm_& operator ()(elem_traits el_)
{ this->os_ << "<"; key_traits::write_on (this->os_, el_.first) << ','; value_traits::write_on (this->os_, el_.second) << ">"; return os_; }
};

inline OStrm_& operator ()(
OStrm_& os_,
typename traits::in_type val_)
{
if (val_.empty ())
{
os_ << "<>";
}
else
{
os_ << '<';
std::for_each (val_.cbegin (),
--val_.cend (),
element_formatter<elem_traits> (os_));
os_ << "<";
key_traits::write_on (os_, (--val_.cend ())->first) << ",";
value_traits::write_on (os_, (--val_.cend ())->second);
os_ << ">>";
}
return os_;
}
};

template <typename T>
struct __value_type
{ using value_type = T; };
Expand Down Expand Up @@ -309,8 +394,8 @@ namespace TAOX11_NAMESPACE
else
{
os_ << '[';
std::for_each (val_.begin (),
val_.end () - 1,
std::for_each (val_.cbegin (),
val_.cend () - 1,
element_formatter (os_));
elem_formatter () (os_, val_.back());
os_ << ']';
Expand Down
10 changes: 4 additions & 6 deletions tao/x11/portable_server/portableserver_functions.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,23 +19,22 @@ namespace TAOX11_NAMESPACE
std::string
ObjectId_to_string (const TAOX11_NAMESPACE::PortableServer::ObjectId &id)
{
std::string s (id.begin(), id.end());
std::string s (id.cbegin(), id.cend());
return s;
}

std::wstring
ObjectId_to_wstring (const TAOX11_NAMESPACE::PortableServer::ObjectId &id)
{
std::string s (id.begin(), id.end());
std::string s (id.cbegin(), id.cend());
std::wstring ws (ACE_Ascii_To_Wide (s.c_str ()).wchar_rep ());
return ws;
}

TAOX11_NAMESPACE::PortableServer::ObjectId
string_to_ObjectId (const std::string& string)
{
TAOX11_NAMESPACE::PortableServer::ObjectId
id (string.begin(), string.end());
TAOX11_NAMESPACE::PortableServer::ObjectId id (string.cbegin(), string.cend());

return id;
}
Expand All @@ -47,8 +46,7 @@ namespace TAOX11_NAMESPACE
s_out << ACE_Wide_To_Ascii (wstring.c_str ()).char_rep ();
std::string string = s_out.str ();

TAOX11_NAMESPACE::PortableServer::ObjectId
id (string.begin(), string.end());
TAOX11_NAMESPACE::PortableServer::ObjectId id (string.cbegin(), string.cend());

return id;
}
Expand Down
1 change: 1 addition & 0 deletions tao/x11/taox11.mpc
Original file line number Diff line number Diff line change
Expand Up @@ -289,6 +289,7 @@ project(taox11) : taox11_defaults, taolib {
basic_argument_t.h
basic_arguments.h
basic_traits.h
bounded_map_t.h
bounded_string_t.h
bounded_type_traits_t.h
bounded_vector_t.h
Expand Down
15 changes: 13 additions & 2 deletions tests/idl4/map/client.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,24 @@
*/

#include "testC.h"
#include "testlib/taox11_testlog.h"

int main (int /*argc*/, char* /*argv*/[])
{
// Just compilation test

Test::StringLongMap mymap;
Test::StringLongMapTypeDef mymaptypedef;
//Test::StringLongMap5 mymap5;
Test::StringLongMap mymap_2;
Test::StringLongMap5 mymap5;

mymap["mymap_FOO"] = 5;
mymap5["mymap5_FOO"] = 5;
mymap_2["mymap_FOO"] = 5;
mymap_2["mymap_BAR"] = 4;

TAOX11_TEST_DEBUG << "mymap: " << mymap << std::endl;
TAOX11_TEST_DEBUG << "mymap_2: " << mymap_2 << std::endl;
TAOX11_TEST_DEBUG << "mymap5: " << mymap5 << std::endl;

return 0;
}
3 changes: 1 addition & 2 deletions tests/idl4/map/test.mpc
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
// -*- MPC -*-

// No ostream ridl_ostream_defaults
project(*map_gen_idl): ridl_defaults {
project(*map_gen_idl): ridl_ostream_defaults {
IDL_Files {
test.idl
idlflags += --idl-version=4
Expand Down

0 comments on commit 3f72271

Please sign in to comment.