A new class unit has been added. Unit is a mini-process
with its own main() and input/output 'plugs'; several
unit objects within the framework of one application can be connected to form
pipes, like processes in the Unix shell.
A new method for creating local pipes, infile::pipe(),
has been added.
Null output stream object has been added as a static variable pnull.
__ptypes_version and the DLL version resource were
not incremented in the previous release. Now they both show 1.7.4.
outmemory::get_strdata() added.
Version 1.7.3
Wrapper templates for objlist, strlist
and strmap have been created. These templates help to
avoid extra (dangerous) pointer typecasts and provide better compile-time type
checking when using lists with objects derived from unknown.
See introduction to Lists.
A new class template compref has been added that
implements a 'smart' pointer to a reference-counted component
object.
Function template tpexchange() has been added
as a type-safe wrapper for pexchange().
Fixed compilation and linking parameters for Linux and FreeBSD to build the
shared library correctly (thanks to Alan Eldridge).
Bug fixed in wshare/urlutils.cxx: the URL parameters (protocol parameters,
query string and fragment) were treated incorrectly in previous versions.
Version 1.7.1
A new section called "Deploying the shared (dynamic)
library" is now included in the documentation. It describes in detail
the procedure of using and deploying the shared (dynamic) library, discusses advantages
and disadvantages of dynamic linking vs. static linking.
PTypes.DLL now contains a version resource. In addition, the library declares
a global variable __ptypes_version, which can be checked at run-time or during
installation on Unix.
strlist::compare() is declared as virtual to allow
alternate sorting algorithms in descendant classes.
Version 1.7.0
Variant class implemented. A variant
variable can hold values of many fundamental types (int, bool, datetime, float,
string) plus associative arrays of variants and reference-counted pointers to
objects. Variants can be used for designing interpreters for higher-level languages,
designing or working with databases and spreadsheets, etc.
Message-oriented networking classes (ipmessage
and ipmsgserver) implemented based on the
UDP protocol.
The library now compiles both as a shared object (DLL on Windows) and a static
library. The shared object (or DLL) is placed in so/
when building the library.
outstm::putf() is now atomic with respect to multithreading.
Ipsocket renamed to ipstream,
ipserver renamed to ipstmserver.
The old names are available as typedef's for compatibility.
Version 1.6.1
Read/write lock (rwlock) algorithm improved
to be "fairer" with respect to both readers and writers.
Trigger algorithm fixed to be fully compatible
with Windows event interface.
psleep() fixed on Solaris to be reentrant (multithreaded).
Memory stream classes inmemory and outmemory,
previously undocumented, now described in section Streams.
Windows InterlockedXXX calls replaced with internal assembly code to work
as expected even on Win95.
A string-to-int (64-bit) conversion routine added - stringtoi().
ipsocket::get_myip() added.
Dynamic string assignment and itostring() optimized.
Better diagnostics messages for ipserver.
Version 1.5.3
Token extraction methods can now optionally limit input and throw en exception
if the token exceeds the limit. This new feature is targeted to real-world networking
applications.
Examples for the sockets interface and some other modules rewritten to be
cleaner and more educational.
GCC 3.x compilation problem solved in pinet.h (friend class declaration).
Version 1.5.2
Dynamic strings have been optimized and thoroughly tested. Compared to MFC
CString class, PTypes dynamic strings now show much better performance.
Bug fixed in decodedate(). This function worked
incorrectly for the last day (12/31) of each leap year.
Version 1.5.1
Documentation cleanup.
A sample compile-time module for wshare, which responds to http://hostname/.about
requests. Code cleanup in wshare.
Version 1.5.0
Wshare is becoming modular/scalable. Custom handlers for a new HTTP method,
file extension or a nonexistent path can be easily incorporated into wshare at
compile time. Currently this feature is documented only in the source files.
Wshare can show the server status report through http://localhost/.wstat
Standard input, output and error devices are declared in <pstreams.h>
as pin, pout and perr stream objects respectively.
New printf-style formatted output method outstm::putf().
Accepts only a subset of format specifiers common to all platforms.
Bug fix in outstm::put().
Handle leak on Windows fixed.
realloc-related memory leak on Unix fixed.
Bug in string class fixed: s += s was working incorrectly
in previous versions.
Version 1.4.1
The MD5 module is replaced with L. Peter Deutsch's implementation. Please,
see comments in src/pmd5.cxx.
Wshare: code cleanup in various modules; Borland C++ port (wshare/wshare.mak);
a new option -x to ignore default index files and always
show directory indexes.
Include directives in src/pipserver.cxx and src/pipsocket.cxx
have been reordered to avoid compiler errors on some Linux systems.
Version 1.4.0
A big sample program called wshare is now included in the project. Wshare
is a simple and fast HTTP/1.1 web server; it demonstrates the full power of PTypes.
Currently wshare lacks server-side scripting functionality, however, it can be
used to quickly share local files over the web.
Waiting for data with timeout on a socket object is implemented (ipsocket::waitfor()).
SIGPIPE is now blocked on Unix when using PTypes'
sockets.
A new utility function utodatetime() for converting
Unix time_t values to PTypes datetime.
Atomic exchange for pointers is implemented separately, since on 64-bit platforms
the size of a void pointer differs from the size of int.
A bug fix for autofree threads. Please note that semantics of thread::waitfor()
has changed (see documentation for details).
Version 1.3.2
Ported to MacOS X (Darwin).
Important fixes in the thread module (src/pthread.cxx):
PTypes now ensures proper operation and memory cleanup on all platforms, even
with buggy implementation of the POSIX threads specs.
Compiled under Linux/Alpha, Linux/PowerPC and Linux/Sparc with minor fixes:
ipaddress type is now castable to unsigned long instead
of signed long; variables of type ipaddress must be compared with ipnone instead
of -1.
Version 1.3.1
CVS repository setup at SourceForge.net (see the main page for details).
Various fixes in the documentation.
Fixes in the BCC makefile src/ptypes.mak.
Version 1.3
IP socket manipulation classes and utilities, finally!
The new datetime type along with time/calendar manipulation
utilities.
The library now compiles within a namespace "pt" by default.
semaphore::post() and semaphore::wait()
now do not return any values. If these functions fail, a fatal non-recoverable
error is raised instead of returning an error code to the caller. It is senseless
to run a multithreaded application if the system fails to operate semaphores.
Bug fixed in non-Intel version of pexchange().
Version 1.2
The entire library can now be conditionally enclosed within a namespace to
avoid name conflicts in large projects. By default the library does NOT compile
within a namespace.
Several fixes to improve performance of the dynamic string class, as well
as to make it thread safe (see introduction to string class).
Ported to SunOS. (The library should now compile virtually on any Unix platform.
Need some time and access to different computers.)
Compiled with Borland C++ 5.5 (aka C++ Builder) under Windows. The makefile
is src/ptypes.mak.
MD5 (message digest) algorithm is implemented as an output stream class outmd5.