Changes since release PB8
- October 2006.
- Smart-pointer COW fix re-worked, sue to a problem in the original July implementation.
- Implemented 64-bit forms of
- September 2006.
ustring classics::as_string (const ratwin::GUID& guid) in
misc_API.cpp was leaving
2 null characters at the end of the string. Who cares‽ It turns out that some code in
OLE32.DLL checks the
length of the string as the first step in validating a GUID, and it didnít like this. This function was fixed, and internal error checking
added as well.
- Due to improved documentation for the Win32 API function
for strings to include the terminating null in the value. Previously it would exclude it.
- August 2006.
ratwin::RegCreateKey changed default access rights from
trickles down to the
registry_key class as well.
- Bug found in
classics::registry_key::key_exists. The "Maybe" case had a typo, so it would always return
if this was the first call made to the
registry_key class, before it has determined if Unicode is available for
the registry API in Windows.
- July 2006.
- Smart pointers improved: semantic fix for COW in multiple threads (see documentation for make_unique).
- Full templated constructors and assignment operators introduced, at last! Easy to comment out if you need to use a compiler older than 2003,
but no longer directly supported.
Changes since release PB7
prothonotary includes AppID.
- June 2006.
Bug found in smart pointers! A race condition when the last
handle and the last
were destructed at the same time on different threads, never showed up before.
fixed_memory_pool speeded up again.
- Vararray improvements.
- Thunks (closures,
member_callback_thunk fully generalized to work with
multiple and virtual inheritence.
- October 2004.
Although it has never caused an actual problem, I detected an issue with freeing the
Items from the pool will still be in use, since the shutdown order is not known! Specifically, the pool for the lifetime object
is destroyed during DLL shutdown before the static empty string object which uses a lifetime object from the pool.
Changed to free pool itself after all nodes are returned (so it still stays clear of memory leak reporting tools), and also
reset the members to zeros so it will spring back to life again if an
alloc is made later.
- Support /CLR option for linking with "Managed" code.
- Loads of stuff to be cataloged...
Changes since release PB6
win_exception class broke due to change in ustring. char* no longer copyed, so format_message
helper was returning a pointer to a local buffer.
exception::iterator detects error on unballanced delimiter.
file_factory remove conflict with Windows.h.
- added more flags to
PC_filesystem_t::exists() to use
directory_list instead of its own code to do the same thing.
PC_filesystem_t::move_file to take flags
PC_filesystem_t::move_file_delayed on Win9x was using short-name for destination; changed to
use short-name for path but name as specified for the final part of the name. Win9X needs short name paths here. So
why does it tolerate a fullname for the final part? Could still be issues here.
- added "copy defered" and "exists" tests to filename_t_UT.cxx.
check_address debugging function to
- added more troubleshooting to handle_UT.cxx (never found anything wrong, though).
- Fix: MFC CString clone had datalength one place where it meant alloclength.
- added classics class
can_handle: added destructor to zero out Lifetime pointer, to trap errors earlier.
- Fix: smart pointer system could mess up in some circular reference cases. If deleting the last owner removed the last borrower
during its constructor, it would access the lifetime object after it was destroyed.
- added much more to
profile_timer. Added wall-clock value, copying, and ability to monitor different threads.
registry_key::key_exists had mixed up two handles, and didn't work.
ustring copy constructor and assignment added, by popular demand.
- the exact way the common shared "empty" instance of vararray is handled was changed. The compiler was found to not
correctly deal with static data items inside template functions: the variable itself was right, but the first-time-only constructor
lock was not! So it would cause multiple constructions. This was harmless in this case, but would leak that object.
obj_reference class to
- Added ratwin_static.h.
- Added ratwin\macrocloak.perl, a technology to deal with WINDOWS.H macros.
- Added ratwin\NumOrName.h, a way to handle Win32 API function parameters that take strings, numbers, or enums.
- Added ratwin\INI_file.h, ratwin\LZexpand.h, ratwin\mailslot.h, ratwin\MessageBox.h, ratwin\shell.h, ratwin\sysinfo.h,
ratwin\window=struct.h, ratwin\io\file=struct.h, ratwin\io\filemapping=struct.h
- Added ratwin\COM\BSTR=static.cpp, ratwin\COM\GUID=static.cpp, ratwin\COM\memory=static.cpp
- To make the smart pointer system more fault-tolerant against stray pointer bugs, hid the pointer in
added a diagnostic to
get_lifetime_object() (which is no longer inline).
- Added some HANDLE subtypes to
ratwin::types, and introduced a mechanism so that functions can take a strictly-typed
sub-HANDLE, or a plain HANDLE, but not the wrong sub-HANDLE.
- moved BitBlt from ratwin\bitmap.h to ratwin\gdi.h
- Introduced RATWIN_NoGlobals preprocessor switch.
- added ratwin\color=struct.h.
- Introduced COLORREF type.
- Introduced ChildOrHMENU.h, for CreateWindow parameters.
- Added ratwin\controls\ImageList.h, Rebar.h, ToolBar.h
- Introduced classics\closure.h
- Introduce sMSG form of calls in ratwin, as an alternative to (window,message,wparam,lparam) tuples.
- Change ratwin::window_class into a template for CharT.
- Tomahawk Lives! Renamed old directory and started a fresh one, for new development.
- Introduced "Release Tools\test_include.perl", to verify interoperability between Ratwin and WINDOWS.H
Changes since release PB5
exception class uniformly uses
ustring instead of pointers.
- added "setup hook" to
string::operator+= for pointers (more efficient than converting pointer to
ustring much more efficient for
wchar_t*. This is a little messy, but is a
prelude to the next generation
ustring class. This was necessary to restore the level of performance
lost by making the
exception class take
ustrings, and the trend toward
ustrings everywhere without
worrying about when raw pointers could be available.
- introduced classics\utf-8 module.
- Fix: classics::COM::factory had circular dependancy on RatWin.
- Fix: classics::COM::server_lifetime_manager now doesn't force a minimum up time.
- Fix: classics::exception::show_function wasn't exported from the DLL.
- Fix: file_factory::Create works around a bug in Win9x, where CreateFile returns a 0 handle
on error instead of INVALID_HANDLE_VALUE, as documented.
- add zero-argument constructor to classics::filename_t.
- add members move_file_delayed, get_short_name to classics::PC_filesystem_t,
and timestamp to filename_t and base filesystem_t.
- filename_t wrappers around filesystem_t features use const_object on the smart pointer
rather than the normal defreference, to prevent unneeded copy-on-write.
- introduced classics::mutex.
- add members to classics::registry_key : zero-argument constructor, assignment operator,
value_exists, set_value taking an int, get_value, get_value_string, get_value_int.
- improve error text for registry_key::create.
- Fix: bug in classics::UCS2_to_UTF8, bad return code could corrupt the stack.
- introduced "virtual key" features in classics::VK::*. Header classics\virtual_key.h
Changes since release PB4
default_show_function incorrectly contained a
static modifier for a local variable.
This caused problems when additional named items were present in exceptions to be displayed.
win_exception didn't format error string under Win95
- Fix: atomic_counter.h needed
atomic_counter of one byte had
add instead of
It seemed to work just fine anyway...
- string class constructors detect a
wchar_t* pointer as an empty string.
Specifically, it won't call
wcslen on a
filename_t class to automatically handle ANSI or Unicode
- Introduce "classics\new.h" feature.
- COM-related classes introduced:
- Introduce 32-bit CRC functions.
file_factory class taken from Tomahawk.
- Cover directory arrangement.
- Write licence document.
- "larger set" and "toptop" in manual pages
- Inherit enums in flagword
- ustring copy constructor not defined—update code to match revised documentation.
- String formatting, wFmt. Revisit code, document.
- string marker doumentation
- string_cast code
- extensibility issues in ustring document
- ustring next generation - separate conversion objects, handle OEM, etc.
- edit exception user's guide
- explain why not logic_error etc. derived types
- auto-logging info in exceptions
- exception::iterator documentation
- exception::register_callback code
- exception_value_logger code
- document/example how win_exception can be handy without throwing
File Names (filename_t, filesystem_t, etc.)
- Overcome limits and bugs with GetFullPathName function by writing my own code.