New Features as of version 1.4.0 Top-Level: * C++: Newer mechanisms for passing tables across processes in shared memory * Added new option to allow XML parameters to accept digits as keys * Better error message if ThreadWorker throws exception * Updates so that NumPy works better with prettyPrint and XML tools Details: * C++: Updated to OpenContainers 1.7.4 * Updated CHANGES * Updated CircularBuffer to be able to specify an allocator * Updated StreamingPool to use cross-process Mutex by default * Updated CondVar: * Fixed so timedwait works * Added timedwait_sec (waits for real number of seconds: 2.3, 4.5, etc) * Updated CQ intensely: * Added so CQ can be placed in shared memory by specifying an allocator as well as giving the CondVar and Mutex shared process option * Added enqueue method which has a timeout in seconds * Added dequeue method which has a timeout in seconds * C++: Added shared memory helper classes via "shmboot.h,.cc" * Added SHMMain class: this encapsulates creating a shared memory section and manages the lower level calls to shared memory. * Added ServerSide class: This allows the user to create the server side of a pipe in shared memory * Added ClientSide class: This allows the user to create the client side of a pipe in shared memory * Added InSHM routines to help detect if a table is fully contained in Shared Memory (and thus will slide across shared memory correctly) * X-Midas: Added Shared memory class examples * serverside: shows how to create an X-Midas primitives using serverside abstraction * clientside: shows how to create an X-Midas primitives using serverside abstraction * Documentation: Shared Memory abstractions * Added a new document: shm.txt,.pdf which describes how to use the SHMMain, ServerSide and ClientSide abstractions. * XML conversion tools: Even though keys starting with digits are illegal, some dictionaries use these as keys. This simply allows them in the XML, even though (strictly speaking) that is illegal XML. By specifying the XML_DIGITS_AS_TAGS. Fixed both Python and C++. * Python: also fixed so only used ast.literal_eval if complexes work * Python MidasServer: * in cleanUp, problems closing * Should have used self.s instead of plain s, and clean up fd * Better Error Message for HTTPServer (ThreadedWorker): * Previously, if a ThreadedWorker (in say, HTTPServer) were to throw an exception, it would look like the HTTPServer was calling a pure virtual function: in actuality, the thread had started even though it was not "completely" constructed, which led to weird state. With a few mods, made it so the server would report a better error. * Add optional parameter to allow SynchronizedWorker to defer construction * Had OCThread::join return early if never started * The ThreadedServer has to explicitly start the thread now, but only after it notices it in a good state. * NumPy updates: * updated pretty print routines so that they understand and handle NumPy arrays. Added a Global flag ArrayOutputOption and three options: NATURAL, LIKE_NUMPY, LIKE_NUMERIC (both C++/Python). If you are in a system where Numeric is king, you can output NumPy arrays like Numeric by setting the global pretty.ArrayOutputOption (in Python) or setting the OCARRAY_OUTPUT_DEFAULT macro (C++) to show how your arrays output. By default, it does the "natural" thing (NumPy arrays output like NumPy arrays, Numeric like Numeric), but you force to one kind if needed. * C++ * Python * updated the XMLDumper to handle NumPy. Changes weren't significant, but the tests and test outputs were tedious ... * C++: No need to do anything: XMLLoader handles all array tags as OC tags (not numpy or Numeric), so nothing changes for * Python: Minor changes to code, tests were tedious to verify worked with Numeric and Numpy across many platforms * updated the XMLLoader to handle NumPy. Changes weren't significant, * C++: changes mostly consisted of making we can parse and output NumPy arrays if needed. Tests build and run like before. * Python: a few changes. Tests build and run like before. * BY DEFAULT, this release handles things as if they were Numeric. If you want to switch to "everything is NUMPY", you need to change the ArrayDisposition everywhere AND : * in C++, #define OCARRAY_OPTIONS_DEFAULT LIKE_NUMPY or set it on the compiler flags with -DOCARRAY_OPTIONS_DEFAULT=LIKE_NUMPY * in Python, it "should" work, but you may have to change pretty.ArrayOutputOption = LIKE_NUMPY # By default, it is NATURAL * Added symlink to Makefile for "Makefile.Linux"