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
Bitbucket repository with example code
Rbtree example

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

Recent Developments

April, 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 Bitbucket 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.

Fixed a number of things, some of which are documented in the Bitbucket 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.