Changes
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
classics::internal::CompareAndSwap and Xexchange.
- 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
RegSetValueEx, updated registry_key::set_value
for strings to include the terminating null in the value. Previously it would exclude it.
- August 2006.
ratwin::RegCreateKey changed default access rights from KEY_ALL_ACCESS to MAXIMUM_ALLOWED. This
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 false
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 baro
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
~static_fixed_memory_pool.
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
- added
directory_list class.
- Fix:
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.
- Fix:
file_factory remove conflict with Windows.h.
- added more flags to
file_factory.
- changed
PC_filesystem_t::exists() to use directory_list instead of its own code to do the same thing.
- improved
PC_filesystem_t::move_file to take flags
- Fix:
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.
- added
get_nodelist and check_address debugging function to static_fixed_memory_pool.
- 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
mutex.
- 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.
- Fix:
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.
- Added
obj_reference class to server_lifetime_manager_t.
- 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
ratwin\COM\IEnumSTATSTG.h
- Added
auto_COM_ptr::operator void*().
- To make the smart pointer system more fault-tolerant against stray pointer bugs, hid the pointer in
can_handle and
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
exception
- add
string::operator+= for pointers (more efficient than converting pointer to string implicitly)
- made
ustring much more efficient for char* and 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
- Fix:
exception's 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.
- Fix:
win_exception didn't format error string under Win95
- Fix: atomic_counter.h needed
Xexchange for byte and char.
- Fix:
atomic_counter of one byte had add instead of xadd instruction.
It seemed to work just fine anyway...
- string class constructors detect a
NULL char*/wchar_t* pointer as an empty string.
Specifically, it won't call strlen/wcslen on a NULL pointer.
- Update
filename_t class to automatically handle ANSI or Unicode
- Introduce "classics\new.h" feature.
- Introduce
PC_filesystem_t::move_file function.
- COM-related classes introduced:
factory, prothonotary, and server_lifetime_manager.
- Introduce
registry_key class.
- Introduce 32-bit CRC functions.
- Simple
file_factory class taken from Tomahawk.
To-Do List
Documentation
- Cover directory arrangement.
- Write licence document.
- "larger set" and "toptop" in manual pages
New Stuff
- Trugs
- Inherit enums in flagword
Registry
Strings
- 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.
Exceptions
- 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.