New Features as of version 1.3.3 August 2012 Top-Level: Minor performance enhancements, added conform testing * Made int_un/int_n division much faster (2x?) * Added XMLDumper and XMLLoader option XML_TAGS_ACCEPTS_DIGITS * Added new Makefile.Linux.factored which allows faster builds * Added timeout to open for HTTPClient so timeouts can be detected faster * Updated M2k area with minor DR fixes * Added Conforms to C++ and Python areas: XML schema-type validation for dicts * minor XMTime fix in opalfile.py * updated opalfile.py to use XMTime directly (from XMTime import XMTime) * Updated the DivMod algorithm for int_un/int_n to be faster * Using a modifed "Hacker's Delight" multiword division algorithm (which is an implementation of Knuth's "Seminumerical Algorithms" division (Algorithm D) from 4.3.1), sped up arbitrary precision integer division by 2x or so. [Modified so it can handle arbitrary base of int_u1, int_u2 or int_u4: there are some casts and special cases to be wary of especially when using a base holder of int_u4. This was not trivial by any means] * Added new tests in the biguint_test (very specific tests to hit certain code paths as well as some general division tests) * Moved original DivMod (based on binary search for q, r) to DivMod2 for a baseline to compare against. The binary search algorithm is slower but much less complex. * Added singleDigitDivide for speed in that case * Added XML_TAGS_ACCEPTS_DIGITS for XML code * When a tag/key starts with a number, rather than just "give up", you can continue (adds an _ to the front so it's legal XML). * updated XML documentation so it at least references it. * New Makefile.Linux.factored shows how to build a standalone .so with all the ptools code plus all the opencontainers code with the OC_FACTOR_INTO_H_AND_CC option. This typically allows you to build 2x faster. * Found a few bugaboos across the baseline that we had to fix to get this to work: mostly just include problems * Updated the HTTPClient so that, if a timeout is provided upon open, it uses the "non-blocking" mechanisms so that a timeout can be detected much faster. * M2k area: * Fixed sample unit.cfg to get genericpickleloader right * Fixed m2opalprotocol2.cc to compile without warnings * Added ability of OpalPythonDaemon to specify how it "envelopes" the RETURN ADDRESS InMsg/OutMsg. In the past, the RETURN ADDRESS was the file descriptor of the socket client, which performed the function of a unique identifier. Problems occured if the file descriptor was closed and immediately reopened, giving the same RETURN ADDRESS to a potentially different client and the OLD request would be routed to the new client. Now, we changed it to up by one, so the odds of intersection are much much much smaller, as we increment through all values of int_u4 before we repeat. Since the typical life of a packet is measured in seconds, the odds of this up by one unique identifier colliding with a previous one are minimal. * Added m2chooser.h which makes it VERY EASY to choose one of manu serializations with which to load/dump OpalValues. This includes the ability to read and write as Python textual and binary dictionaries FROM M2k * Added routine "Conforms" to C++ baseline: * Implements a simple schema-like validation (akin to XML schema validation) where a input table is checked against a "valid" prototype, where the input table contains the expected keys and types of values to be expected. * Added conform_test.cc/output for unit testing * Added documentation to FAQ and User's Guide describing the Conforms. * Added routine "conforms" to Python baseline: * Implements a simple schema-like validation (akin to XML schema validation) where a input table is checked against a "valid" prototype, where the input table contains the expected keys and types of values to be expected. * Added conform_test.py/output for unit testing * Added documentation to FAQ and User's Guide describing the Conforms. * The Python behaves *almost* the same as the C++: since Python can have all sorts of different values (besides the limits of the C++ Val), it can handle iterables and inheritance: We did this to make the Python conforms more "Pythonic". It's also a stand-alone module that can be plopped into any Python baseline. * Updated and cleaned a few tests that were failing the OpenContainers tests *Found/Fixed minor bug in StringToBigUInt/StringToBigInt *Found/Fixed minor bug in split *Found/Fixed bad output in proxy_test * Updated m2chooser.h to mirror what's in the m2k area. Added SERIALIZE_PYTHONPRETTY (as an alias for SERIALIZE_PRETTY) SERIALIZE_PYTHONTEXT (as an alias for SERIALIZE_TEXT) and two new enums: SERIALIZE_OPALPRETTY and SERIALIZE_OPALTEXT. These just help wrap the OpalValue textual tools that already exist: it just makes them easier to use from 'chooseser.h'.