libutil++ v1.9.3 (7/13/17) - http://www.digitalgenesis.com

	v1.9.3 (7/13/17)
	- Optimized sv::Variant::AutoType.
	- Fixed defect in su::MessagePack with decode of int64 values.

	v1.9.2 (6/23/17)
	- Optimzied null sv::Variant and sn::IPPrefix.
	- Added sv::Variant::TypeMsgPack for direct decoding.

	v1.9.1 (5/27/17)
	- Added missing su::PathException header.
	- Fixed defect in su::String::substr_replace() when passed an empty search parameter.
	- Optimized sv::Variant::operator==() and sv::Variant::operator!=().

	v1.9.0 (4/15/17)
	- Added su::String::rate().
	- Fixed defect in sn::DNS::convertARPA().

	v1.8.0 (4/9/17)
	- Minor sv::Variant optimizations.
	- Fixed uninitialized memory defect in sn::IPAddress.
	- Added su::Path and su::String::isPrintable().

	v1.7.0 (11/26/16)
	- Added Gzip support to deflate and inflate in su::String.
	- Added deflate and fixed gzip support in ss::HTTP.
	- Added authentication related functions to ss::HTTPRequest.

	v1.6.7 (11/14/16)
	- Fixed sub-expression issue with regex_search() and regex_search_sub() in su::String.

	v1.6.6 (10/29/16)
	- Fixed issue with sn::IPPrefix not properly setting CIDR value when initialized from an IP.
	- Fixed issue with sv::IPPrefix not properly checking CIDR value.

	v1.6.5 (8/15/16)
	- Improved performance sv::Variant's TypeAuto constructor, parse() and unjson() functions.
	- Variant move constructor and operators will now perform a swap where possible.
	- Added su::String::base64_encode() and su::String::base64_decode().

	v1.6.4 (7/31/16)
		- Fixed issue with sn::IPAddress not clearing internal cache with applyCIDR is used.
		- Fixed issue with sn::IPAddress::applyCIDR(0) not modifying IPv4 addresses.
		- Fixed issue with sv::Variant compare operators not handling const char* as a std::string compare.
		- Added eq and cmp typedefs to sn::IPAddress sn::IPPrefix.

	v1.6.3 (6/28/16)
		- Fixed issue with 64 bit value passed to su::String::itoa() and not properly extending string.
		- Added sv::Variant::TypeXxx symbols to allow emplace to work.
		- Fixed issue with -1 encoding in su::MessagePack.

	v1.6.2 (6/11/16)
		- Enhanced su::UUID::base64() to support standard and non-standard (URL safe) output formats.
		- Added su::String::scale() to provide short hand output in thousands, millions, billions, etc.

	v1.6.1 (6/2/16)
		- Fixed su::String::duration() output when used with a decimals of 1+.

	v1.6.0 (5/23/16)
		- Fixed a crash bug in sv::Variant related to bad MsgPack input. 
		- Added stack trace support to sella::Exception.
		- Added operator[]() to sc::CedarTrie and additional variations for insert, remove, contains and at.
		- Remove mantissa output on su::String functions.
		- Added su::File::itomode().
		- Enhanced su::Privilege capability functions.
		- Added left and right brace parameters to su::String::join.
		- Added mode arguments to read, readline and write in su::File.
		- Added su::UUID::base64() for shorter ASCII UUID representation.
		- Fixed Variant::isNull().

	v1.5.0 (2/15/16)
		- Added support to embedded HTTP server to access specific headers and zlib/gzip compression.
		- Reorganized embedded HTTP internal functions for correctness and improved content-type handling.
		- Added parseURI() and buildOutput() helper functions to embedded HTTP server.
		- Added secure socket support to embedded HTTP server.
		- Added su::Process::setNice() and su::Process::getNice().
		- Added su::Process::setIONice() and su::Process::getIONice().
		- Added su::Process::isRunning() and su::Process::getStartTime().
		- Added CPU, memory, IO, threads and uptime related functions to su::Process.
		- Added su::String::deflate() and su::String::deflate() for zlib and lz4 compression.
		- Added su::Time::clock_realtime_coarse(), su::Time::clock_monotonic_coarse() and su::Time::clock_boottime().
		- Removed unused timezone arguments from su::Time::clock_* functions.
		- Added support for building Debian packages.
		- The su::Log() TRACE and DTRACE macros no longer generate the formatted string if the traceoption is not set.
		- Fixed warning in su::Log on Ubuntu.
		- Added IF and TIME variations to su::Log.
		- Fixed su::IPAddress::operator>() and su::IPAddress::operator<() mixed family bug.
		- Fixed sv::Unsigned and sv::Null auto-match regex.
		- Added additional sv::Variant move semantics.
		- Added sv::Variant constructor and sv::Variant::cast for sn::IPAddress and sn::IPPrefix.
		- Added sv::Variant::zero() which sets values to 0 or clears containers.
		- Added sv::Variant::asVector() and sv::Variant::asMap() functions.
		- Added direct assignment of sn::IPAddress and sn::IPPrefix into a sv::Variant.
		- Added unjson(), cjson(), xml() csv() output functions into sv::Variant.
		- Added msgpack(), unmsgpack(), msgpack_buffer(), unmsgpack_buffer() functions into sv::Variant.
		- Added sv::Variant::sort() and sv::Variant::unique().
		- Fixed sv::Variant::parse() to properly identify UUID, IPAddress and IPPrefix in Vector and Map input.
		- Fixed sv::Variant::setType() when source was null.
		- Improved performance of sv::Variable JSON parsing and reduced memory usage for sv::Variant::str().
		- Removed an unused prototype for su::String::regex_isearch().
		- Fixed sn::DNS::shared_ptr functions and renamed static sn::DNS::resolve() to sn::DNS::sresolve().
		- Modified sn::DNS::resolve() to return std::vector<std::string>, default to AnyProtocol and added PTR record support.
		- Added sn::DNS::resolve() and sn::DNS::bulkResolve() which leverage internal async calls to improve performance.
		- Added optional default value output for empty containers and quote support to su::String::join() calls.
		- Added setIPCLock(), clearIPCLock() and hasIPCLock() to su::Privilege.
		- Added internal memory scrubbing of sensitive data in su::Crypt before release.
		- Added su::String::encrypt(), su::String::decrypt() and su::String::random().
		- Converted su::ResourceLimit to a static class.
		- Added su::ResourceLimit::setFileDescriptors() and su::ResourceLimit::getFileDescriptors().
		- Added ThreadPoolException to su::ThreadPool constructors.
		- Fixed sn::Socket::recv() bug length with std::string and std::vector buffers.
		- Added sn::SecureTCPSocket with TLS 1.0, 1.1, 1.2 and SSLv3 support.
		- Added regex_search_sub(), str_imatch(), strcmp(), strncmp(), strcasecmp() and strncasecmp() to su::String.
		- Added support to su::String::regex_search functions for inserting matches into a set.
		- Added su::Interface::getInterface() to lookup an interface name by IP address.
		- Added su::File::getDirectory(), su::File::read(), su::File::readline() and su::File::isReadable().
		- Added radix_tree template under sella::container. This is a slightly enhanced version of Yuuki Takano's radix_tree.
		- Added CedarTrie template under sella::container. This is a wrapper around cedar by N. Yoshinaga and M. Kitsuregawa.
		- Added su::String::itoa() as a higher performance alternative to snprintf.
		- Removed deprecated su::String::substr_replace2() and substr_ireplace2().
		- Removed all deprecated functions from su::Interface.

	v1.4.0 (11/20/14)
		- Added basic embedded HTTP server with callback support.
		- Added su::ThreadPool with scaling worker, scheduling, priority and pause functionality.
		- Added sn::DNS with sync and async IPv4/IPv6 resolver fuctions.
		- Added su::File with support for realpath, basename, dirname, exists and type/time checking.
		- Added su::FileLock for creating file based locks.
		- Added what() and getCode() to BUILD_EXCEPTION macro for SWIGPERL.
		- Added getName() to Exception and removed deprecated constructors.
		- Added RegexException to sella/util/String regular expression functions.
		- Added set and list support for su::String::join().
		- Added char support for su::String::trim(), su::String::rtrim() and su::String::ltrim().
		- Added bandwidth, dataRate, dataSize and duration to su::String with decimal support.
		- Added Time::chronototv() and Time::tmtostr(), Time::sptostr(), etc. functions.
		- Added std::chrono support for Task::setDelay() and Task::setTimer().
		- Added std::chrono support for TaskQueue::push() and TaskQueue::repush().
		- Added Process::stackTrace() which produces a GDB like stack trace.
		- Added Processs::runCommand() which runs a shell command and captures output.
		- Added sn::IPAddress constructors for in_addr and in6_addr.
		- Added sn::IPAddress incrementors and decrimentors.
		- Added sn::IPPrefix getIPAddresses().
		- Added sn::Pipe, sn::UnixSocket, sn::SocketPair and sn::SocketTrigger.
		- Added additional sn::Socket::send and sn::Socket::recv functions.
		- Added doxygen, snapshot and yum enhancements to build system.
		- Added sella::server as ss and sella::file as sf to alias.h.
		- Added size to Variant and enhanced empty.
		- Added limit parameter to su::String::split().
		- Added compressed CSV file and path readers and writers.
		- Added THROWS() and NO_EXCEPTIONS macros.
		- Added an updated PREFETCH() macro for added functionality.
		- Removed debug output in sn::Socket.
		- Removed all depricated sptr typedefs in favor of shared typedefs.
		- Removed unnessessary const on Socket remote and local informational functions.
		- Fixed install path for WRR and TokenBucket algos.
		- Fixed bug in su::String::join() when passed an empty vector.

	v1.3.6 (03/12/14)
		- Improved SWIG PERL compatability by adding ifdef around alias.h.
		- Fixed FIXME and TODO macros in Log.
		- Added missing case insensitive functions to String.

	v1.3.5 (03/09/14)
		- Added full IPv6 support to Socket classes.
		- Added json, c_json, xml and c_xml helper functions to Variant.
		- Changed default log mask to LOG_DEBUG.
		- Fixed output of null Variants within an Object.
		- Fixed libutilxx__package() and libutilxx__version.
		- Fixed logic error in Socket::isUsable().
		- Fixed compiler warnings with Log's debug macros with NDEBUG set.
		- Fixed bug with Process::getPath() not appending a null.

	v1.3.4 (01/04/14)
		- Improved SWIG PERL compatability by adding ifdef around Variant's Null constructor.
		- Log's debug macros with NDEBUG defined now substitute with false.  

	v1.3.3 (12/08/13)
		- Added boolean functions to check Variant types.
		- Fixed Variant string output for new types.

	v1.3.2 (11/26/13)
		- Fixed crash bug with Exceptions with formatted messages.
		- Added RETHROW2() and RETHROW2_CODE() macros.
		- Fixed Variant automatic type detection for strings.

	v1.3.1 (11/23/13)
		- Added Interface::getIPAddress(), Interface::getIndex() and Interface::getName().
		- Fixed Socket::setSoBindToDevice() implementation.
		- Added EtherSocket::setPromiscous() and EtherSocket::getInterface().
		- UUID within a Variant's Object and Vector is now quoted.
		- Added a number of Interface::convertMAC() functions.
		- Added IPAddress, IPPrefix and Pointer to Variant.
		- Added MixedLogFormat and VerboseLogFormat for Log.

	v1.3.0 (09/22/13)
		- Added Variant class with support for JSON as input and output.
		- Corrected the method used to check for C++11 support.
		- Added constructors for assigning a UUID with a input string.
		- Added isRoot(), isRootGroup(), wasRoot() and wasRootGroup() to Privilege.
		- Added regex_match and regex_search which accept a boost::regex.
		- Fixed split() and added option to include blank segments.
		- Added Weighted Round Robin algorithm template class.
		- Added BUILD_EXCEPTION macro for custom exception building.
		- Improved header guards to ensure they are unique.
		- Added IPAddress, IPPrefix and Pointer to Variant

	v1.2.0 (02/11/13)
		- Added IPPrefix including operators to check if a prefix or address
			contains another.
		- Added clear(), getPort() and getProtocol() to Port.
		- Added constructor for uint32_t and unsigned char[16] to IPAddress.
		- Added operators for bitwise AND, OR, XOR and NOT to IPAddress.
		- Optimized IPv6 comparisons in IPAddress.
		- Fixed bug related to htonl/ntohl in IPAddress.
		- Added sub-expression support to regex_match, regex_imatch, regex_search
			and regex_isearch.
		- Added support for attaching a numeric code to Exception.
		- Added macros for RETHROW, THROW_CODE, THROW2_CODE and RETHROW_CODE to
			Exception.
		- Added support for passing an Exception to Logging macros (eg: WARNING,
			ALERT, etc).
		- Added Process for access to the running process name and PID.

	v1.1.0 (01/06/13)
		- Added support for passing vector of traceoptions.
		- Added macros for SET_TRACE, UNSET_TRACE, CLEAR_TRACE and HAS_TRACE to Log.
		- Added trim, ltrim and rtrim to String.
		- Added substr_ireplace, regex_replace, regex_ireplace, regex_match,
			regex_imatch, regex_search and regex_isearch to String.
		- Added missing unistd.h include for GCC 4.7.
		- Added clear() to IPAddress.
		- Added functions to Interface to get MAC addresses.
		- Added test program for verifying library calls. This is also useful as an
			example of how to use the library.

	v1.0.0 (12/01/12)
		- Simplified Task callback code and changed Task.data to a vector.
		- Crypt functions and dependencies may now be disabled by passing
		  SKIP_CRYPT=1 to configure or skip_crypt to rpmbuild.
		- Improved efficiency of TRACE and LOG calls and also added return
			values to allow for chaining.
		- Added HERE and MARK macros to Log.
		- Changed default LogFormat to SimpleLogFormat.
		- Allow syslog message length to be adjusted from default of 1022.

	v0.3.0 (04/21/12) - Not released
		- Added TODO() and FIXME() macros to Log.
		- Added shared_ptr() and empty() function to Task UUID, IPAddressPort,
			IPAddress and Port.
		- Added UDPSocket and RawSocket classes and simplified constructors for
			all socket classes.
		- Added push() and repush() with a timeval argument to TaskQueue.
		- Added move semantics to IPAddressPort, IPAddress, Port, UUID and Task.
		- Added Privilege class which provides ability to modify user/group and
			Linux capabilities.
		- Added optional data pointer into Task.
		- Added substr_replace to String.
		- Added str() and c_str() to Exception.
		- Restricted syslog message length to 1022 to avoid overflow.
		- Added PidFile which provides an interface to handle a pid file.

	v0.2.0 (03/25/12)
		- SocketMux now uses shared_ptr to pass Sockets.
		- SocketMux now cleanly supports pthread_cancel by toggling
			PTHREAD_CANCEL_ENABLE and PTHREAD_CANCEL_ENABLE at the internal select().
		- SocketMux now includes new rselect(), wselect(), eselect() and rwselect()
			functions to reduce overhead on simplier workloads.
		- SocketMux now includes epoll() function, which performs better with high
			counts of sockets vs select().
		- SocketMux performance improvements were implemented.
		- Sockets now track if they are in a SocketMux, which is queried with the
			Socket::hasMux() function.
		- Updated Socket to use IPAddressPort, IPAddress and Port classes to
			return local and remote addresses.
		- Implemented IPAddressPort, IPAddress and Port constructors accepting
			sockaddr and sockaddr_storage.
		- Added on-demand cached getString(), c_str() and getHash() functions to
			IPAddressPort, IPAddress and Port.
		- Added UUID class.
		- Included add() function for CommandLine which accepts a long value with
			bounds checking.
		- Improved hash functions for IPAddressPort, IPAddress and Port.

	v0.1.0 (01/21/12) - Initial release
		- Implemented IP Address (v4/v6), Socket, Command Line, Compression,
			Encryption, Logging, String, Time, Interface and Task classes.

# vim: noet ts=2 sw=2
