DataReelDataReelC++ Toolkit Documentation

DataReel 7.0 Beta Release Notes

Contents

Requirements
Removed, and what to use instead
Rewritten classes
Namespace
Bug and security fixes
Porting from 6.x
Guides for ai coding assistants
How the release was tested
Supported platforms

DataReel 7.0 is a beta release. DataReel 6.2 remains the stable release for production use until 7.0 is final; please report problems through https://datareel.com/contact.php.

DataReel 7.0 is a modernization release. The library now requires C++17, uses the C++ standard library for strings, containers, threads, files and time, and keeps the parts the standard library does not have: the object database, TLS networking and the portable file formats. Every network protocol except telnet and ping uses TLS.

Database, index, InfoHog and gxRDBMS files are unchanged. The same programs built against 6.2 and 7.0 write byte-for-byte identical files, and 7.0 reads files written by 6.2.

The library version is 7.0 (version.txt, DATAREEL_VERSION_STRING in gxdlcode.h, libdatareel.so.7.0). The database file format version (gxDatabaseVersionNumber 4630) is unchanged.

Requirements

Removed, and what to use instead

 UString, gxString, gxStringw     std::string, std::wstring, and the
                                  helpers in strutil.h
 strutil C string functions       strutil.h std::string helpers
 MemoryBuffer, MemoryBlock        std::vector<unsigned char>
 gxList, gxListB, gxBStree        std::list, std::vector, std::set,
                                  std::map
 DiskFileB, futils                std::fstream, std::filesystem
 SysTime                          systime.h functions, std::chrono
 gxThread, gxThreadAPIWrapper,    std::thread or std::jthread
 thread helpers, gThreadT
 gxMutex, gxCondition,            std::mutex, std::condition_variable,
 gxSemaphore                      std::counting_semaphore (C++20)
 thrPool                          datareel::ThreadPool (thrpool.h)
 gxDeviceCache, device buckets    (no replacement; the B-tree and
                                  database caches remain)
 FString                          char arrays or std::array
 gxIP32, gxMAC48                  gxsAddress, std::string
 gxDatagram                       gxSocket::OpenDatagram()/SendTo()
 gxsHTML, gxsXML, gxsRSS parsers  a dedicated parser (pugixml,
                                  libxml2)
 HyperText, PostScriptDrv,        std::format/std::ostream
 asprint report writers
 Terminal (curses/ANSI.SYS)       ncurses directly
 Ehandler, ostrbase               exceptions, std::ostream
 leaktest (MSVC CRT)              AddressSanitizer, valgrind
 gxsSocketUtils (gxsutils.h)      (moved into gxsPing)
 wserror (Winsock messages)       gxSocket::SocketExceptionMessage()
 gxrdbsql.h (empty placeholder)   SQLite if you need SQL
 stdafx.h, gxdlincs.h, wxincs.h,  (not needed)
 wx2incs.h
 hexdump, ffind, txfilter utils   xxd, find, sed, PowerShell
 MSVC nmake, Borland, MinGW and   CMake
 Intel makefiles; dll/, winslib/

Rewritten classes

Networking

General

Database

Namespace

Every class, type, constant and function is declared in namespace datareel. gxdlcode.h, which every DataReel header includes, adds "using namespace datareel;" so 6.x code that uses unqualified names still compiles. Define DATAREEL_NO_GLOBAL_NAMES before including any DataReel header to keep the names out of the global namespace and qualify them (datareel::gxDatabase).

Bug and security fixes

Porting from 6.x

1. Build with CMake (or the new build/makefile) and C++17. 2. Replace gxString/UString with std::string. Most member calls have a

   strutil.h function: TrimLeadingSpaces() -> trim_left_in_place(s),
   DeleteBeforeIncluding(x) -> delete_before_including(s, x),
   Atoi() -> to_int(s), IFind() -> ifind(s, p), ToUpper() ->
   s = to_upper(s), FilterChar(c) -> erase_char(s, c), and
   "s << a << 42" -> str_append(s, a, 42). Find() returns
   std::string::npos instead of -1.

3. Replace MemoryBuffer with std::vector<unsigned char> (m_buf() ->

   data(), length() -> size(), Load(p, n) -> assign(p, p + n)).

4. Replace the thread classes with std::thread, std::mutex and

   std::condition_variable, and thrPool with datareel::ThreadPool.

5. Network code: open TLS connections with gxsTLSConnection or the

   protocol clients. Servers use gxsTLSServer with a certificate and
   key. Test servers with self-signed certificates need SetCAFile()
   on the client (or SetVerifyPeer(false) for tests only).

6. gxConfig::Load() and the Write functions return bool (true on

   success); GetStrValue() returns const char* or null.

7. LogFile no longer derives from DiskFileB; use Open(), WriteLine(),

   Write() and operator<<.

8. CDate::c_str() is now str() and returns std::string. 9. Keep DATAREEL_64BIT_DATABASE and DATAREEL_NATIVE_TYPES the same as

   your 6.x build so your files keep their layout.

Guides for ai coding assistants

AGENTS.md, llms.txt, llms-full.txt and docs/ai describe how to use DataReel for TLS communications and object databases, with complete sample programs (docs/ai/samples) that tests/run_tests.sh builds and runs. docs/bin/make_ai_docs.py copies the samples into the guides and rebuilds llms.txt and llms-full.txt.

How the release was tested

Supported platforms