Ebenezer Enterprises

We offer free services aimed at helping those who are developing applications with C++.


Web Interface to the C++ Middleware Writer
Command Line Interface to C++ Middleware Writer
  Comparing Boost Serialization to our approach -- Updated
  Send Sample - sendsample.cc
  Receive Sample - receivesample.cc
  Rbtree Sample

Text Service

Supported Types and Platforms

Provide Feedback

Company Overview

Links

A voice of reason in the Democratic Party

Recent Developments

July, 2010

Version 1.13 is on line. This version adds support for:

1. A lil_string class which throws an exception if an operation would result in a string more than 255 characters. This guarantees that the length of the string can be marshalled with one byte. Lil_string is used, for example, to hold account passwords.

2. Move semantics. A config file parameter, 'Permit-std::move', is used to indicate that the generated code may use std::move. The following shows an example of code generated when Permit-std::move is turned on.

template <typename B>
void
Receive(B* buf, vector<deque<lil_string> >& abt1)
{
  uint32_t headCount[2];
  buf->Give(headCount[0]);
  abt1.reserve(abt1.size() + headCount[0]);
  for (; headCount[0] > 0; --headCount[0]) { 
    deque<lil_string> rep4;
    buf->Give(headCount[1]);
    for (; headCount[1] > 0; --headCount[1]) { 
      lil_string rep5(buf);
      rep4.push_back(std::move(rep5));
    }
    abt1.push_back(std::move(rep4));
  }
}
April, 2010

Version 1.12 of the C++ Middleware Writer released.

February, 2010

Version 1.11 of the C++ Middleware Writer released.

November, 2009

Version 1.10 of the C++ Middleware Writer released.

August, 2009

Support for stable_vector added. Here's a modified version of stable_vector.hpp that compiles with gcc version 4.3.2.

May, 2009

Support for Boost Array is available.

April, 2009

February, 2009

December, 2008

Https support added.

March, 2008

Support for the Boost Unordered Containers library is available. This includes unordered_set, unordered_multiset, unordered_map and unordered_multimap.

Support for message lengths is now available. Code that receives messages should call SetMsgLength() (ReceiveBuffer::SetMsgLength or ReceiveCompressedBuffer::SetMsgLength) prior to calling a Receive function. See the Receive Sample for an example of this. A clc++m thread titled "Preventing Denial of Service Attack in IPC Serialization" was instrumental in our decision to add this support.

Support for the Boost Range library's sub_range<> is available. The support for this type is unusual in that it is possible to send data via a sub_range but not receive data into one. There's more info here about how we support this type.

January, 2008

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

msgs
  (list<int32_t>) @msg_id_a1
}

results in this output. Notice how the Send function includes code to send a message ID, but the Receive function doesn't have any related code. The data sent by the Send function will probably be handled by two Receive functions. The first Receive function (not shown) to execute will get a message ID, which can then be used to dispatch to the Receive function in the above listing. This program shows an example of that.

July, 2007

Added a Resize function to the Buffer class.

December, 2006

Fixed an overflow problem in Buffer's Receive function and made a few minor changes to the class.

June, 2006

Worked on improvements to the Middleware Service documentation including expanding the "Advantages" section and adding a section called "Dealing with Stragglers" that discusses supporting multiple versions of a product simultaneosly.

December, 2005

Added valarray<> support,
changed/improved the code generated when receiving vectors of POD,
changed/improved the code in Send functions after noting only a single int is needed to keep track of the counts/sizes of container classes. We still use an array of ints in Receive functions.