Skip to content

UTF, Fast Strings, Fast Filesystem, and Image Meta-Data

Compare
Choose a tag to compare
@bluescan bluescan released this 06 Sep 05:59
· 524 commits to master since this release

Many improvemnts in this release. Major new functionality includes support for reading image meta-data (EXIF) from jpg files, full support for UFT encodings (UTF-8, UTF-16, and UTF-32), and significant implovements to the string class -- it is much more time and space efficient. There are a number of changes that may require modification of client code to remain compatible -- these have been marked PBC (Possible Breaking Change) below. In most cases it is trivial to update.

The improvements and fixes are itemized below.

  • tCommand is now renames tCmdLine to clarify that it is used for command-line parsing. PBC.
  • Fixed a GIF-loading error that could lead to incorrect (uninitialized) pixels in the first frame of animated GIFS that contain transparency.
  • Fixed a subtle bug in tChrlwr and tChrupr where non-alphabetic characters would get modified.
  • tScriptWriter consistently uses either tabs (default) or spaces. It mixed them before this release.
  • Explicitely set the alpha for tColour aggregate initializers.
  • Component-channel support in tPicture.
  • Thread-safe intrusive list class (tsList).
  • Ability to retrieve network share names in Windows. Results will match what Windows explorer displays.
  • File-type handling and queries much faster by using table lookups.
  • Added tGetHomeDir that gets the home directory in Linux and the User directory in Windows.
  • Description of how to use function-objects with all tList sort functions so that arbitrary satellite data can be accessed.
  • TinyXML2 and TinyEXIF libraries now in use by Tacent for parsing image meta-data.
  • All meta-data attributes massaged for easy access as well as descriptions for each attribute type.
  • Cleaned up tString case functions. PBC.
  • Optional EXIF orientation compensation in JPG-loading class. Can correct for photos taken in portrait, mirrored etc.
  • tString internal representation is now UTF-8 and uses proper char8_t C++ type for the code-units. PBC
  • tStandard conversion functions to and from all combinations of UTF-8, UTF-16, and UTF-32. Convenient UTF helper classes for UTF-16 and UTF-32. tString works directly for UTF-8.
  • Tacent can be compiled to use either UTF-8 OS API or UTF-16 API functions on Windows. See TACENT_USE_UTF16_API.
  • In order to be clear about the distinction between a filetype and its extensions, the synonyms in the tFileTypes enum have been removed. A single filetype may map to multiple extensions. PBC
  • Variants of tFindDirs and tFindDirsRec that populate a tFileInfo list instaead of just a list or strings. Allows retrieval of more directory info in the same pass. This can be considerably faster if you need to know more than just directory names -- for example whether the directory is read-only or not.
  • Removed tFindFilesFast and its variants. The heavy-lifting file functions now support running either a native backend (Linux and Windows) or a cross-platform C++ std::filesystem implementation. In all cases the native is faster -- all functions that support different backends default to native. If you are using the 'fast' versions of the functions, now just use the normal versions as they default to the fast behaviour. PBC.
  • tString supports multiple nulls inside the string. String length is now stored explicitely (faster).
  • tString supports 'capacity' (more memory allocated than is necessary for the current string length). This results in faster appends/concatenations and less memory fragmentation. Ability to set heuristic for how the memory automatically grows. This may be breaking if client code copies directly into the tString code-units array. Code that needs to do this should now set the length properly first instead of calling Reserve. See description at start of tString.h. PBC