Ebenezer Enterprises

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

Using the C++ Middleware Writer in your build environment
Comparing Boost Serialization to our approach
Send Sample - sendsample.cc
Receive Sample - receivesample.cc
Rbtree Sample

Supported Types and Platforms
Provide Feedback
Company Overview
Links

Recent Developments

November, 2011

Version 1.13 of the CMW is on line. This version adds support for move semantics. The following shows an example of generated code that uses std::move.


template <class R>
void
Receive (::cmw::ReceiveBufferTCP<R>& buf
         , std::vector<std::deque<std::string> >& az1
        )
{
  uint32_t headCount[2];
  headCount[0] = buf.Give<uint32_t>();
  az1.reserve(az1.size() + headCount[0]);
  for (; headCount[0] > 0; --headCount[0]) {
    std::deque<std::string> rep2;
    headCount[1] = buf.Give<uint32_t>();
    for (; headCount[1] > 0; --headCount[1]) {
      rep2.push_back(buf.stringGive());
    }
    az1.push_back(::std::move(rep2));
  }
}
October, 2010

Version 1.12 of the C++ Middleware Writer released.

April, 2010

Version 1.11 of the C++ Middleware Writer released.

November, 2009

Version 1.10 of the C++ Middleware Writer released.

July, 2009

Exclusive support for boost::intrusive::list and boost::intrusive::rbtree is available. Neither Boost Intrusive nor the serialization library in Boost offers serialization support for these containers.

March, 2008

Support for the Boost Unordered Containers library 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.

January, 2008

Support for message IDs is now available.
This Middle code:

msgs
  @msg_id_a1 @out (list<int32_t>) 
}

results in this output. Notice how the Marshal function includes code to send a message ID. This program shows an example of that.