Limitations:
------------

- The nesting level of TSF files is limited to 8. This value can be increased by 
  changing "tsf.h" (#define TSF_LEVEL_COUNT 8) or 
  "tsf.cs" (levelData = new LevelData[8];).
  
- TSF2JSON.EXE: Arrays of type "data" and "flags" are not supported. The nesting
  level of TSF files is limited to 1024.


Version history:
----------------

V1.1.19 (2019-10-31)
- Additional C++ wrapper macro to include the code for dynamic memory

V1.1.18 (2019-10-28)
- Additional constructors were added to the C++ wrappers, which take a buffer 
  address and the size. This allows using the C++ wrappers without dynamic 
  memory usage.

V1.1.17 (2019-10-17)
- New function "TsfWriteSortedObject0" to allow the physical writing of all
  checksums including zero

V1.1.16 (2019-07-20)
- Reverse property to change the future Endianess

V1.1.15 (2019-07-12)
- tsfuuid.c: New pseudorandom number generator (xorshift128+)

V1.1.14 (2017-12-06)
- Tsf.Create has a fifth argument (to also support TSF fragments)
- tsf.cs: The namespace is now "Tellert.Format" instead of "Tellert.Tsf"
- tsf.cs: class Tsf is now public

V1.1.13 (2017-10-23)
- tsf.h: Optional support for TSFH_LITTLE_ENDIAN and TSFH_BIG_ENDIAN
- tsf.cs: Clean up of the endian code. Good/Bad are now properties.

V1.1.12 (2017-10-21)
- tsf.cs: Changed WriteFileWithoutException to TryWriteFile and 
  OpenWithoutException to TryOpen

V1.1.11 (2017-10-20)
- tsffile.c/tsfclass.cpp: The write functions return an error on error state
- New functions TsfIsGood/TsfIsBad/Good/Bad

V1.1.10 (2017-10-19)
- tsfwrite.c: WriteNumber(0xffffffffffffffff) and WriteId(0) yields an error 
  state

V1.1.9 (2017-10-19)
- tsf.cs: Short functions which take the offset and size from its input argument
- tsfclass.h: New data type TsfBytes
- tsf.h: New functions TsfReadObject() and TsfReadSortedObject()
- tsfread.c/tsf.cs: The read functions remember an irrecoverable error but try 
  to only ignore the current item first

V1.1.8 (2017-10-18)
- tsfclass.cpp: Simplified call to Open() and WriteFile()
- tsffile.c: Alternatively higher level file access

V1.1.7 (2017-10-17)
- Changed functions TsfWriteUuid/TsfWriteFixedArrayUuid/TsfWriteVarArrayUuid to 
  take the TsfUuid array directly
- New function TsfUuidFromNonce()
- tsfclass.h: Changed the return value of Open(fileName)
- tsfclass.cpp: Changed the behavior to reuse the Tsf C API by default
- Changed the return value of function TsfUuidNew()

V1.1.6 (2017-10-16)
- tsf.h: Sorted functions to TSF_SUPPORT_INPUT and TSF_SUPPORT_OUTPUT
- tsffile.c: Replaced with low level file I/O

V1.1.5 (2017-10-16)
- tsf.h/tsfclass.h: New macros TSF_SUPPORT_INPUT and TSF_SUPPORT_OUTPUT

V1.1.4 (2017-10-15)
- tsffile.c: New file for stream access

V1.1.3 (2017-10-15)
- tsfwin32.c: New file for Win32 platforms only
- tsf.h/tsfclass.h: New functions TsfUuidNew(uuid) / Tsf::Uuid::New()

V1.1.2 (2017-10-15)
- tsf.h/tsfclass.h: New functions for Id/Level/Count/Ext/Data

V1.1.1 (2017-10-15)
- New C++ functions to support level 1 access
- tsf.h: New functions TsfGetDataSize(tsf) and TsfGetDataCount(tsf)
- tsfread.c: Bug fixed for TSF_SUPPORT_FLOAT_FROM_INT
- tsfclass.h: Bug fixed in WriteSorted(int id, const void *data, size_t size)

V1.1.0 (2017-10-14)
- New C++ interface
- New C file tsfuuid.c
- tsf.h: Included tsfwrite.h
- tsf.h: Bug fixed in definition of TsfInt64
- tsf.h: Bug fixed in TsfWriteFixedArrayData / TsfWriteFixedArraySortedData

V1.0.3 (2017-10-13)
- tsf.cs: New constructor Tsf(string fileName) { Open(fileName); }
- tsf.cs: Initializations after Init() removed

V1.0.2 (2017-10-13)
- tsf.h: New function Select(tsf, id) which is short for SelectObject(tsf, id)
- tsf.cs: New functions Init() and Close()
- tsf.cs: Changed Write() to remember the error state

V1.0.1 (2017-10-11)
- tsfwrite.c: Bug fixed in TsfWriteFixedArray.../TsfWriteVarArrayUInt...

V1.0.0 (2017-10-09)
- Initial release
