Ebenezer Enterprises

We host a code generator called the the C++ Middleware Writer (CMW). The CMW writes portable binary serialization code.

Using the C++ Middleware Writer
Supported types and platforms
Github repository with example code
Rbtree example

Provide feedback
Company overview/Partnership proposal
Comparing the serialization library in Boost to our approach
Links

Recent Developments

February, 2017
CMW version 1.14 is here. This version adds support for plf::colony and std::string_view. A search for string_view in the Github repo shows how it can be used in messages.

There's also support for a no_inline option in the Middle code. For example:

  -out -no_inline (bool, ::std::string_view)
The no_inline option indicates that a generated function should not be marked as inline. If you only include a generated header in one translation unit, it's safe to use this option. If you have a message that you build in multiple places in a translation unit, using this option may reduce the size of your executable. The use of this option reduced the size of the CMW Ambassador's text segment by 128 bytes, which was about 0.3% of the total.

Fixed a number of things, some of which are documented in the Github repo.

August, 2014
Version 1.13 of the CMW is on line. This version takes advantage of move semantics. Here's an example of some generated code:
template <class R>
void Give (::cmw::ReceiveBuffer<R>& buf
       ,std::vector<std::deque<std::string> >& az1){
  int32_t count[2];
  count[0]=buf.template Give<uint32_t>();
  az1.reserve(az1.size()+count[0]);
  for(;count[0]>0;--count[0]){
    std::deque<std::string> rep2;
    count[1]=buf.template Give<uint32_t>();
    for(;count[1]>0;--count[1]){
      rep2.emplace_back(buf.GiveString());
    }
    az1.emplace_back(::std::move(rep2));
  }
}
December, 2013
Version 1.12 of the CMW released.
April, 2012
Version 1.11 of the CMW released.
November, 2010
Version 1.10 of the CMW released.
July, 2009

Exclusive support for boost::intrusive::list and boost::intrusive::rbtree is available. No other serialization library offers support for these containers.

March, 2008

Support for "unordered" containers is available. This includes unordered_set, unordered_multiset, unordered_map and unordered_multimap.

Support for the Boost Range library's sub_range<> is available. Support for this type is unusual in that it is possible to marshal data based on a sub_range but not receive data into one. All messages that use sub_range need to use the @out option; not doing so will cause the code generation to fail.