nlib
Past Revision Histories

List

2016-12-22

  • Added libraries, compiled for Visual Studio 2017 RC, to the package.
  • For building samples for Visual Studio, added a script, gen-sln.ps1, for creating a Visual Studio solution file from PowerShell using CMake.
  • For building samples for CAFE and CTR, added scripts, cmake_cafe_ninja.ps1 and cmake_ctr_ninja.ps1, for creating a build script for ninja from PowerShell using CMake.
  • On and after this release, libraries compiled for Visual Studio 2012 will be no longer included in the package.
  • Added the new function nlib_pause().
  • Made other minor changes and fixes.

2016-11-29

  • On and after the next release, libraries compiled for Visual Studio 2012 will no longer be included in the package.
  • Started operation check in Fedora 25. Operation check in Fedora 24 is no longer supported.
  • Defined the new macro NLIB_TLS_INVALID.
  • Added the new function nlib_atomic_exchangeptr().
  • SIGLO-41003: Fixed an issue where dumping the heap status after allocating a large size of memory caused a crash.
  • NXBTS-8006: Fixed an issue where signed 64-bit integers of msgpack may be incorrectly parsed in the msg library.
  • Fixed an issue where an crash may occasionally occur due to issues related to implementation of DllMain for Windows libraries.
  • nlib_tryonce() is now deprecated. This function will be deleted in a future release.
  • The /sdl option is now set during compilation with Visual Studio.
  • Made other minor changes and fixes.

2016-10-25

2016-09-20

  • Started operation check in FreeBSD 11.0. FreeBSD 10.3 is no longer officially supported.
  • Updated the version of SQLite bundled with the OSS libraries to 3.14.1.
  • Implemented nlib_bitreverse32() and nlib_bitreverse64().
  • It is now possible to specify O_EXCL(NLIB_FD_O_EXCL) in nlib_fd_open()/tt>.
  • Modified nlib_fd_create() so that it fails if the file already exists.
  • nlib_strcplen2() was renamed nlib_strcplen(). nlib_strcplen2() will be provided as a macro for a while and then be deleted.
  • nlib_popcnt() was renamed nlib_popcnt32(). nlib_popcnt() will be provided as a macro for a while and then be deleted.
  • nlib_clz() was renamed nlib_clz32(). nlib_clz() will be provided as a macro for a while and then be deleted.
  • nlib_ctz() was renamed nlib_ctz32(). nlib_ctz() will be provided as a macro for a while and then be deleted.
  • Deleted deprecated files and functions.
  • Made other minor changes and fixes.

2016-08-23

  • Started operation check on Bash on Ubuntu on Windows. The compiled libraries are shipped with your PC version package.
  • Added heap::CentralHeap::FreeWithSize(), heap::CentralHeap::GetAllocSize(), and heap::CentralHeap::Realloc().
  • Added NMALLOC_QUERY_SET_COLOR, NMALLOC_QUERY_GET_COLOR, NMALLOC_QUERY_SET_NAME and NMALLOC_QUERY_GET_NAME to queries for nmalloc_query(). This function associates a 24-bit integer value or a string with any allocated region of 4096 bytes or more.
  • For how to use this function, see the object_tracking sample in the heap library.
  • Added NMALLOC_DUMP_PAGESUMMARY to NMallocDumpMode.
  • Improved improper behaviors of commands, including nmalloc, when failing to allocate a TLS index. nmalloc_setmark1(), nmalloc_setmark2(), nmalloc_getmark() and nmalloc_getobjptr() are now deprecated. They will be deleted in a future release.
  • NMALLOC_HEAPOPTION_CHECK_0 and NMALLOC_HEAPOPTION_CHECK_1 are now deprecated. They will be deleted in a future release.
  • Made other minor changes and fixes.

2016-07-26

2016-06-29

2016-05-31

  • Starting with the next release, a 64-bit cygwin build is provided as its PC version, and the library directory will be changed from lib/cmake/gcc to lib/cmake/cygwin.
  • Added nlib_remove() and nlib_thread_getname().
  • Improved the behavior of heap::CentralHeap(nmalloc) of the heap library.
    • Mitigated the issue where allocating a large size of memory (1 MB or more) caused fragmentation.
    • Mitigated the issue where an assigned memory address range was larger than necessary.
  • Other minor changes and fixes

2016-04-26

  • Started operation check in Alpine Linux 3.3.
  • Started operation check in Ubuntu 16.04LTS. Ubuntu 15.10 is no longer officially supported.
  • Started operation check in FreeBSD 10.3. FreeBSD 10.2 is no longer officially supported.
  • Mitigated an issue where allocating relatively large size memory (4 KB or more) using heap::CentralHeap(nmalloc) from the heap library caused fragmentation.
    • Allocation of a memory size up to 1 MB can now best fit within a free list (previously a size up to 512 KB can do so).
    • Fixed an issue where memory is prone to have fragmentations if the memory is allocated with an alignment.
  • Updated the version of SQLite to 3.12.2, which is included in the oss libraries. In addition, temporary files can be now automatically deleted.
  • In nlib_fd_pwrite() and nlib_fd_pread() for the CAFE and CTR versions, corrected the behavior found when an offset larger than the file size is specified.
  • simd::I64 is now deprecated.
  • The Crc32 class is now deprecated. Use nlib_crc32() or nlib_crc32c() instead.
  • Other minor changes and fixes

2016-03-29

2016-02-23

  • The oss library now uses nlib_malloc instead of nmalloc in platforms other than CAFE and CTR.
  • NMALLOC_QUERY_UNIFY_FREELIST can now be specified for the argument of nmalloc_query() in the heap library.
  • The fragmentation of metadata in the heap retained by the heap library's CentralHeap is reduced.
  • Added simd::I128::PopCntMask8(), simd::I128::ClzMask8(), and simd::I128::CtzMask8() to the simd library.
  • Corrected issues where some header files were missing.
  • Fixed an issue where nlib_malloc_size() could not be used in the Windows version of the DLL.
  • Made other minor changes and fixes.

2016-01-26

  • Started operation check in CentOS 7.2. Operation check in CentOS 7.1 is no longer supported.
  • Started operation check in Fedora 23. Operation check in Fedora 22 is no longer supported.
  • Added the nlib_is_error() function. It allows errors to be definitely evaluated and described for the return values of errno_t or bool.
  • The nlib_getenv() function now supports CAFE and CTR.
  • The IsOk() and IsError() functions for each class have been depreciated. Use the nlib_is_error() or operator bool() function instead.
  • Added the Init() member function to Utf16InputStream, Utf32InputStream, WcharInputStream, Base64InputStream and Base64OutputStream in the misc library.
  • The initialization process for the TextReader, TextWriter, BinaryReader and BinaryWriter classes for the misc library is now split into two stages: one with Init() and one with Open().
  • The IsOk(), IsError(), Initialize() and GetErrorValue() member functions for each class in the exi library have been depreciated.
  • The Initialize() member function for each class in the heap library has been depreciated.
  • The initialization process for the CsvReader class for the msgpack library is now split into two stages: one with Init() and one with Open().
  • Fixed an issue where nmalloc_aligned() crashed if memory was assigned with an alignment larger than 4096 bytes.
  • Corrected the issue where nmalloc_query(NMALLOC_QUERY_MAX_ALLOCATABLE_SIZE, ...) could return a size larger than the one actually allocated.
  • Corrected the issue where F128::StoreLoA4() and F128::StoreHiA4() of the simd library may crash during operation on the ARM processor.
  • Made other minor changes and fixes.

2015-12-08

  • Created Natvis visualization rules for nlib. The rules improve visual representations in the Visual Studio debugger. Include the nlib.natvis file under the utilities directory in the project. Doing so also adds the following classes for supporting visualization.
    • Error names can be displayed in the debugger by assigning errno_t to the ErrnoT object.
    • A UTF-8 string can be viewed in the debugger by assigning a pointer to the UTF-8 string to the Utf8Ptr object. Utf8Array is an array of Utf8Ptr objects.
  • Added the Base64Encoder and Base64Decoder classes to the misc library. Various variants of Base64 can be encoded and decoded with those classes.
  • Added the msgpack::JsonStreamGenerator class to the msgpack library. JSON or msgpack can be output using the same code.
  • Deprecated the msgpack::JsonWriter and msgpack::MpWriter classes in the msgpack library. Use the msgpack::JsonStreamGenerator class instead.
  • Deprecated the msgpack::JsonReader and msgpack::MpReader classes in the msgpack library. Use the msgpack::JsonStreamParser class instead.
  • MpObject in the msgpack library now supports the msgpack specifications issued in and after August 2013. Some functions have been added and some other functions have been deprecated.
  • Fixed an issue where a build failed in CMake 3.4.
  • Fixed an issue where InputStream::Read(ptr, nbytes) did not correctly write data of a certain large size to the read buffer.
  • Made other minor changes and fixes.

2015-11-10

  • Added libraries compiled for Visual Studio 2015 to the package.
  • Deleted libraries compiled for Visual Studio 2008 and 2010 from the package.
  • Started operation check in Ubuntu 15.10. Ubuntu 15.04 is no longer officially supported.
  • Added the CurlInputStream class to the misc library. The class for handling data downloaded using libcurl in streams.
  • Added KeyIdxSortN() and KeyIdxSort() to the misc library. You can sort objects quickly by sorting 32-bit keys taken from them.
  • Added nmalloc_query() to the heap library. You can inquire or set various kinds of heap status. Also, several functions that should be replaced with nmalloc_query() have been depreciated.
  • Added the msgpack::JsonStreamParser class to the msgpack library. You can parse JSON or msgpack in a pull manner.
  • Updated the version of SQLite bundled with the oss libraries to 3.9.0.
  • Made changes so that the stream error state is reset when InputStream or OutputStream is closed.
  • Made other minor changes and fixes.

2015-10-13

  • Added the threading::LockFreeThreadPool class to the misc library. This thread pool is suitable for fine grain tasks.
  • Added the GroupVarInt32 class to the misc library. This class allows fast encoding and decoding of 32-bit integers.
  • Added nlib_malloc_size() to the misc library.
  • Changed the alignment of memory allocated by nmalloc() to correspond to the alignment of std::max_align_t.
  • Made other minor changes and fixes.

2015-09-08

  • Started operation check in FreeBSD 10.2. FreeBSD 10.1 is no longer officially supported.
  • Added the DynamicAlignedStorage class to the misc library.
  • Added the LockFreeUnitHeap class to the misc library.
  • Added the LockFreePipe class to the misc library.
  • Added the LockFreeStack class to the misc library.
  • Added the LockFreeQueue class to the misc library.
  • Added the LockFreeInit() function to the misc library.
  • Added the LockFreePriorityQueue class to the misc library.
  • Added the LockFreeBroadcastQueue class to the misc library.
  • An alignment that is larger than 4096 can now be specified in nmalloc_aligned().
  • Fixed an issue where NULL was returned when a too large size was specified in nmalloc() or nrealloc().
  • The computation speed in the Crc32 class has been now improved.
  • Fixed a bug where a destructor was not executed properly when a message queue with a priority set was used in a lock free manner.
  • Deleted deprecated files and functions.
  • Made other minor changes and fixes.

2015-07-28

2015-06-26

  • Added support for Fedora 22. Added support for builds that use gcc 5.1.
  • Started operation check in FreeBSD 10.1. FreeBSD 10.0 is no longer officially supported.
  • Updated the version of LZ4 bundled with the oss libraries to 1.7.0.
  • Added nn::nlib::oss::Lz4InputStream and nn::nlib::oss::Lz4OutputStream to the oss library.
  • Added the lz4_nlib command-line compression tool that uses LZ4.
  • Added the HandleMaker class to the misc library. This class supports implementations that allow a handle (32-bit integer value) to be associated with some objects.
  • Added the nlib_spinlock_init(), nlib_spinlock_lock(), nlib_spinlock_trylock(), and nlib_spinlock_unlock() functions to the misc library.
  • Added the nlib_thread_exit() and nlib_thread_exit_cpp() functions to the misc library.
  • Added the nlib_thread_attr_setstack() and nlib_thread_attr_getstack() functions to the misc library. Along with this addition, deleted the NLIB_THREAD_ATTR_KEY_STACKADDR macro.
  • Added the nlib_error_string() function to the misc library.
  • Changed the specification of the threading::ThreadSettings class in the misc library to wrap nlib_thread_attr. Related code needs to be modified since the source code level compatibility is no longer provided.
  • The operations of nmalloc can now be customized with the NLIB_NMALLOC_DISABLE_TLSCACHE, NLIB_NMALLOC_HEAPSIZE, and NLIB_NMALLOC_MODE environment variables.
  • Fixed an issue where nmalloc_aligned() might not allocate memory with a specified alignment.
  • Improved the hash quality of nmalloc_heaphash().
  • Fixed an issue where the sample XML file for the testing library was not output in the 2015-05-26 version.
  • nlib_strerror() is now deprecated.
  • threading::CondVar::Init() is now deprecated.
  • Made various improvements and fixed bugs in platform code.
  • Made other minor changes and fixes.

2015-05-26

  • Updated the version of LZ4 bundled with the OSS libraries to 1.6.0.
  • Added the following macros to the testing library: ASSERT_STRCASEEQ, ASSERT_STRCASENE, EXPECT_STRCASEEQ, and EXPECT_STRCASENE.
  • The testing library now loads several environment variables supported by Google Test.
  • Added the nlib_disk_freespace function to the misc library.
  • Added the nlib_fd_readv and nlib_fd_writev functions to the misc library.
  • Added the nlib_fd_preadv and nlib_fd_pwritev functions to the misc library.
  • Added the OutputStream::WriteGather member function to the OutputStream class in the misc library.
  • Added the Nflags::GetBoolFromEnv, Nflags::GetInt32FromEnv, Nflags::GetInt64FromEnv, Nflags::GetDoubleFromEnv, and Nflags::GetStringFromEnv member functions to the Nflags class in the misc library.
  • Started operation check in Ubuntu 15.04. Ubuntu 14.10 is no longer officially supported.
  • There is no longer an HTML Help version of the reference manual. This version is no longer necessary now that the functionality of the Doxygen search box has been improved.
  • Deleted deprecated files and functions.
  • StringInputStream is now deprecated.
  • Made other minor changes and fixes.

2015-04-21

  • Added support for CentOS 7.1. Added support for builds that use gcc.
  • Made improvements to the layout of the Reference Manual (English version).
  • Made other minor changes and fixes.

2015-03-31

  • Made improvements to the layout of the Reference Manual.
  • Added the 64-bit static library for Visual Studio 2012 to the package.
  • Added the 64-bit DLL for Visual Studio 2012 and 2013 to the package.
  • Divided the oss library files for each OSS. The reason being that the OSS binaries cannot be excluded during the dead-code stripping process that occurs when linking DLLs and shared libraries (but not static libraries).
  • Added a suffix of '_d' to the basename for library files in the debug build. This change prevents DLLs and shared libraries from mistakenly dynamic linking to these files.
    • The CAFE and CTR library files are exceptions, however.
  • Made revisions to put the debug and release builds of the libraries in the same directory. This change is possible because the filenames for the different builds are no longer the same.
    • The CAFE and CTR library files are exceptions, however.
  • A string representing the version and build settings will be added to the base names of library files for Visual Studio builds. In conjunction with this, files will all be stored in the msvc directory, instead of in directories created for each version and build setting.
    • For example, library files for the 32-bit, static library version of Visual Studio 2012 will be named nx_misc-vc120.lib and nx_misc-vc120_d.lib.
  • The command-line tool can now access shared libraries via relative paths in an environment in which RPATH can be configured. As a result of these changes the LD_LIBRARY_PATH setting is no longer needed.
  • The DateTime class now supports reads and writes in asctime format.
  • Made other minor changes and fixes.

2015-02-23

  • Added an English version of the reference manual (this document).
  • Added support for OS X. Added support for builds that use Xcode (clang).
  • Added libraries compiled for CAFE and CTR to the PC version of the package.
  • Added nlib_mlock and nlib_munlock.
  • msgpack::MpObject now supports reading and writing by C++11 standard library array, unordered_map, and tuple objects.
  • Added the NLIB_VIS_HIDDEN and NLIB_VIS_PUBLIC macros.
  • Changed builds in Visual Studio 2010 and later versions to use the DLL version of the C runtime.
    • Changed the /MT and /MTd options to /MD and /MDd, respectively.
  • Added the -fvisiblity=hidden and -fvisibility-inlines-hidden options to the compiler options for gcc and clang libraries in non-Cygwin environments. This reduces the number of symbols the library makes public.
    • Generally, the load time of shared libraries has improved.
  • When using CMake, you must use version 3.1.0 or later.
  • nn::nlib::threading::CondVarFallback is now deprecated. It will be deleted in a future release.
  • Made other minor changes and fixes.

2015-01-14

2014-12-10

  • Added support for the 64-bit version of FreeBSD 10.0. Added support for builds using clang and libc++.
  • Added nlib_clz, nlib_clz64, nlib_ctz, and nlib_ctz64.
  • Added nlib_popcnt, nlib_popcnt64, and nlib_popcnt16.
  • Added nn::nlib::simd::I128::AlignR.
  • Improved the performance of code written for SSE4.1.
  • Revised the CAFE implementation of nlib_ticktime to use OSGetSystemTime instead of OSGetTick.
  • Improved finalization (unloading) of the heap library (for the case of DLL/shared libraries).
  • Made other minor changes and fixes.

2014-11-18

  • Improved the testing library.
    • Added support for the options - --gtest_filter, --gtest_shuffle, --gtest_random_seed, and --gtest_print_time.
    • Added support for the - --help option.
  • Fixed a bug with the heap library that caused metadata to become corrupted in some situations.
  • Made other minor changes and fixes.

2014-11-07

  • Added Readme-ja.html.
  • Made other minor changes and fixes.

2014-11-04

  • Improved the performance of the heap library.
  • Added nmalloc_get_settings.
    • When using nmalloc, use nmalloc_get_settings instead of configuring g_NMallocSettings.
  • Added nlib_gen_random.
  • Improved the performance of nn::nlib::succinct::AhoCorasickBuilder.
  • Improved the performance of nn::nlib::threading::ThreadPool.
  • Updated the version of SQLite bundled with the OSS libraries to 3.8.7.
  • Fixed a bug that sometimes prevented the PC version of nrealloc from allocating physical memory appropriately.
  • Fixed a bug that prevented occasional error detection in the SIMD-optimized version of nlib_strcplen_ex.
  • Made other minor changes and fixes.

2014-10-01

  • It is now possible to specify the destructor in the CTR version of nlib_tls_alloc.
    • Starting with this release, CTR-SDK 10.0 or later is required.
  • Added the gameheap sample to the heap library.
    • This sample builds and uses heaps in separate per-object, per-module, and per-thread memory regions.
    • The use of multiple different heaps may make it possible to reduce the risk of memory-related bugs.
    • Each heap operates in a thread-safe manner and keeps fragmentation in check.
    • It uses the heap library to implement an interface that is typical of heaps used in game development.
  • Fixed a bug that caused a leak in the thread-cache region of the heap library's nmalloc function.
    • This bug occurred in environments in which nlib_tls_getvalue returns NULL when a thread ends.
  • The nmalloc_thread, nmalloc_realloc, nmalloc_malicious, and speeddemo samples were deleted, and their contents were integrated into thenmalloc_simple sample.
  • When using the text-based XML parser of the exi library, revised the behavior that caused strings in text nodes to be invalid prior to allocator deletion.
    • This behavior has been revised to match the behavior of the binary XML parser, so that strings for text nodes are valid until the allocator is deleted.
  • Deleted XmlStreamEventLogger from the exi library.
  • Made other minor changes and fixes.

2014-09-03

  • Improved checks for macro definitions in the PC environment. This mitigates problems that occur when compiling using proprietary makefiles or project files.
    • Displays a warning message if the following macros are not defined during compilation in Windows.
      • WIN32_LEAN_AND_MEAN, NOMINMAX, _USE_MATH_DEFINES
    • Displays a warning message if the following macros are not defined during compilation in Windows, Cygwin, or Linux.
      • __STDC_LIMIT_MACROS, __STDC_CONSTANT_MACROS, __STDC_FORMAT_MACROS
  • Changed the typedef for nlib_sock from SOCKET type to int type in Windows.
  • Rebuilt NEON code for the simd library using the actual cross compiler for the ARM architecture (gcc 4.9).
    • Operational tests currently use the NEONvsSSE_6.h file distributed by Intel.
  • Added AArch64 code to the code for the simd library.
  • Improved the instructions for setting up nlib.
  • Added an FAQ.
  • Deprecated several functions in the nn::nlib::unicode namespace. These will be deleted in a future release.
    • nn::nlib::unicode::ToUtf32, nn::nlib::unicode::ToUtf16, and nn::nlib::unicode::ToUtf8
    • nn::nlib::unicode::Utf32ToUtf8, nn::nlib::unicode::Utf16ToUtf8, and nn::nlib::unicode::WideToUtf8
    • nn::nlib::unicode::Utf8ToUtf32, nn::nlib::unicode::Utf8ToUtf16, and nn::nlib::unicode::Utf8ToWide
  • Deleted several header files, functions, and the like.
    • Deleted nn/nlib/threading/SimpleRingBuffer.h from the misc library.
    • Deleted nn/nlib/threading/Interlocked.h from the misc library. In the future, use a C-linkage function like nlib_atomic32_increment directly.
    • Deleted nn/nlib/threading/CallOnce.h from the misc library.
      • Deleted functions like nn::nlib::threading::CallOnce and nn::nlib::threading::TryCallOnce. In the future, use C-linkage functions like nlib_once and nlib_tryonce directly.
    • Deleted the NLIB_PRINTF, NLIB_VSNPRINTF, and NLIB_VSNWPRINTF macros.
    • Deleted the NLIB_ATTRIBUTE_ALIGN macro. In the future, these macros will be integrated into the NLIB_ALIGNAS macro.
    • Deleted nn::nlib::StrEqual and nn::nlib::StrNEqual. Use a function like strcmp or nn::nlib::StrCmp directly.
  • Revised several samples.
  • Updated NLIB_MEMORY_ORDER_RELEASE, NLIB_MEMORY_ORDER_ACQUIRE, and NLIB_MEMORY_ORDER_ACQ_REL.
    • atomic_thread_fence is used if C++11 is available.
    • Added optimization barriers for functions like _WriteBarrier on the Win32 version. This resolves some problems caused by optimization.
    • In the CTR version, run a combination of DataSynchronizationBarrier and optimization barriers.
  • Made other minor changes and fixes.

2014-08-04

  • Made the simd library support paired singles on CAFE. Calculations that use single-precision floating-point numbers now use paired singles.
    • Note that this method is significantly slower than the Cafe SDK functions for purposes such as matrix calculation, because its interface returns 128-bit data such as four-dimensional vectors as values.
    • On SSE4.1/NEON, this method is optimal because it stores and returns 128-bit data in 128-bit registers like the XMM register.
  • Added classes and functions to the simd library.
    • Added the Frustum class.
    • Added methods for determining whether a frustrum intersects or contains various types of geometry.
  • In the CTR version, made changes so that nlib_init_ctrsample allocates the buffer for RomFs dynamically.
  • Adjusted the initial size of the buffer allocated for XML attributes by the tokenizer of the text-based XML parser of the exi library.
  • In the Win32 environment, made changes so that the UNICODE and _UNICODE macros are no longer defined. nlib does not depend on the existence of these macro definitions.
  • In the Win32 environment, made changes to check the value of the WINVER macro.
  • Added an introduction to the Reference Manual about methods of automating setup of the build environment.
    • Added a description of the chocolatey package-management tool for Windows. Using chocolatey enables you to implement a degree of automation for the build environment for Windows program development.
    • Added a description of the about the apt-cyg package-management tool for Cygwin. Using apt-cyg enables you to implement a degree of automation for the build environment for Cygwin program development.
  • Improved the explanation of how to set up the environment for using nlib with Windows and Cygwin.
  • Fixed a bug that prevented versions using the nlib_strcplen and nlib_strcplen_ex SIMD instructions from operating correctly when strings were terminated immediately before page boundaries (4096-byte boundaries).
  • Made other minor changes and fixes.

2014-07-07

  • Added classes and functions to the simd library. They all support SSE4.1, NEON, and general architectures.
    • Added Sphere, AxisAlignedBox, and OrientedBox classes. These classes support spheres, AABBs, and OBBs, respectively.
      • 3D transforms on spheres, AABBs, and OBBs
      • Creation of spheres and AABBs that contain collections of points
    • Support for distance-calculation functions
      • Calculation of distances between points, lines, rays, line segments, planes, spheres, and AABBs
    • Support for intersection determination functions
      • Intersection determination for points, lines, rays, line segments, planes, spheres, AABBs, and OBBs
    • Support for containment determination functions
      • Containment determination for spheres, AABBs, OBBs, points, and triangles
    • Extensions and improvements to other functions
  • Optimized (mostly switch statements) code that uses NLIB_ASSUME (__assume) and __builtin_unreachable.
  • Added __restrict decoration for several function arguments.
  • Fixed bugs that prevented several constants from linking within the simd library on CAFE/CTR.
  • Fixed bugs with Vector3::Rotate and Vector3::InvRotate.
  • Made other minor changes and fixes.

2014-06-06

  • Added functions to the simd library. They all support SSE4.1, NEON, and general architectures.

    • Support for 4x4 matrices
      • Matrix multiplication, transposition, inversion, determinant, various rotations, perspective projection matrices, parallel projection matrices, projection matrices, reflection matrices, FOV transformation matrices, and unit decomposition into SRT
      • Loading and storing matrices in 4x4, 3x4, 4x3, and 3x3 formats in memory
    • Support for three-dimensional vectors
      • Various conversions through comparisons, dot products, cross products, normalizations, lengths, reciprocals of lengths, angles, reflections, and matrices; rotations through quaternions
      • Loading and storing matrices in three-dimensional vector format in memory
    • Support for four-dimensional vectors
      • Various conversions through comparisons, dot products, cross products, normalizations, lengths, reciprocals of lengths, angles, reflections, and matrices
    • Support for planes
      • Conversions through various dot products, creation of planes from points and normals, intersections of planes and lines, intersections of planes and planes, normalization, and matrices
    • Support for quaternions
      • Conversions from conjugations, multiplications, dot products, sphere linear interpolations, exponents, logarithms, SQUAD, center of gravity coordinates, various rotations, and rotation matrices
    • Added numeric calculation functions.
      • Added F128::Exp2 and F128::ExpE.
      • Added F128::SinH, F128::CosH, and F128::TanH.
      • Added F128::Tan.
      • Added F128::Log2 and F128::LogE.
    • Added a high-speed merge sort that uses the simd library (nn::nlib::simd::MergeSortUint32A16).
      • The performance is, at maximum, more than ten times faster than std::sort (measured sorting 32 elements in a Visual Studio 2013 release build)
      • The elements were unsigned 32-bit integers. They must be multiples of 16 [bits?].
      • If you want to sort some collection of objects, prepare an array of 32-bit numbers that are amalgams of the object IDs and their priorities, and then sort that.
    • Included an XML file (searchdata.xml) for the creation of proprietary search indices by users in the Reference Manual.
      • It is primarily the raw data for constructing a search engine that can search through multiple manuals.
      • For more information, see here.
    • Added support for the use of clang-format and clang-check, tools that use LibClang. For more information, see the following.
    • Clarified the information specific to nlib's coding rules.
      • Noted the differences between them and those of the Google C++ Style Guide.
      • Included anew clang-format with its conversion settings that conform to the nlib coding style.
      • A file called compile_commands.json is now created when a makefile is created using cmake. That file can be used to use clang-check (http://clang.llvm.org/docs/HowToSetupToolingForLLVM.html).
    • We are making changes such that short descriptions of the API will be visible when you rest the mouse pointer on the nlib API that is notated in user code in the Visual Studio IDE. This is now possible with the following APIs.
      • The simd library APIs
    • Added the /Oi option to the list of Visual Studio compile options.
    • Made other minor changes and fixes.

2014-05-09

  • Added the simd library for SSE4.1 and NEON, to support SIMD operations on integers and floating point numbers.
    • Implemented the nn::nlib::simd namespace.
    • It is possible to develop programs for both SSE4.1 and NEON with the same C++ code.
    • When compared to code not using the simd library, you can expect a maximum of a tenfold improvement in performance. At ordinary levels, the increase in performance will be two- to threefold.
    • Floating point operations are possible even in the SSE4.1 and NEON environments, where such operations would not normally be possible.
    • Various functions and other components will be added in future releases.
      • Operations for three- and four-dimensional matrices and vectors.
      • Ordinary algorithms have been accelerated with SIMD operations.
  • The /bigobj option has been added for builds of programs in all versions of Visual Studio.
  • Fixed a bug where strList from the Nflags::GetStringCommaList function in the Windows version would be stored to a pointer in the local stack.
  • Deleted AsciiReader and AsciiWriter, which had been deprecated as of the 2014-03-24 release.
  • Made other minor changes and fixes.

2014-04-07

  • Added the 64-bit version of the libraries for the PC version.
    • A version compiled with Visual Studio 2013 is included.
  • Added the NativePathMapper class.
    • This class is for converting path strings in URI format to path strings in a native format. Use of this class creates a strings notated in a URI common to all devices, and removes device-dependency for strings such as path strings.
  • Fixed a bug where redirected output was not working with functions like nlib_printf, when standard output was redirected in the Windows (Visual Studio) version.
  • Fixed a bug where control strings were output when output was redirected with the testing library in the Cygwin version.
  • Fixed a bug where the file output of the sample test results for the testing library in the CAFE/CTR version would fail.
    • Used NativePathMapper to make improvements by setting path strings appropriately for each platform.
  • Updated the version of SQLite3 bundled with the OSS libraries to 3.8.4.3.
  • Fixed a bug where strings were not NULL-terminated in the stingutils sample code.
  • Made other minor changes and fixes.

2014-03-24

  • Added nlib_utf16cplen_ex.
  • Added nlib_skipws.
  • Sped up various functions using SIMD.
  • Added nlib_swapendian_16, nlib_swapendian_32, and nlib_swapendian_64.
  • Increased the speed of the text XML parser.
    • Improved the parsing speed for XML that includes long text data such as Base64.
    • Improved the parsing speed of attribute values.
    • Note that there is a slight increase in memory consumption as a result.
  • Increased the speed of the nn::nlib::msgpack::JsonReader class.
    • Changed the string scanning algorithm within the parser to one with more compatibility for SIMD instructions.
    • Other improvements are included.
  • Increased the speed of the nn::nlib::msgpack::MpObject class.
    • Increased the speed of box formation processing for strings.
  • Increased the speed of the BinaryReader and BinaryWriter classes.
  • Increased the speed of the nn::nlib::msgpack::MpWriter class.
  • SSE4.1 is now required for execution on the PC version.
    • This is for improving the future portability to NEON for SIMD code.
  • Changed the argument specifications for the TextReader::ReadUntil function.
    • There were deficiencies in the existing specifications.
  • The TextReader class can now be inherited.
    • Processes such as error checking can be added when loading to the buffer.
  • The following headers were deleted: nn/nlib/utility.h, nn/nlib/time.h, and nn/nlib/uriparser.h.
  • The AsciiReader and AsciiWriter classes have been deprecated. They will be deleted at some point on or after the next release.
    • Given the improvements in speed and functionality to the TextReader and TextWriter classes, it was determined that there was no longer any need for classes specific to ASCII strings.
  • Made other minor changes and fixes.

2014-02-12

2014-01-20

  • Enabled the building of samples using Cygwin's cmake, even for CAFE and CTR.
    • Systems for builds and libraries are now cross-platform in nature.
    • The process can be started from the shell script within the samples/cmake/ directory.
  • Added support for move semantics in a C++03 base.
    • If the nn::nlib::move_tag function is specified as the last argument for some classes and functions, the argument object will be moved (the object's swap member function will be used).
  • Improved the handling of arguments by the Thread class.
    • Passing the nn::nlib::move_tag function as the last argument will move the argument object.
    • The Thread::StartRef function was deleted.
  • Functions were added to the Platform API.
  • Increased the speed of the nn::nlib::msgpack::JsonWriter class.
  • Revised the CAFE version to use the high-speed versions of nlib_memcpy and nlib_memmove.
  • Added nlib_strlen and nlib_wcslen. On some platforms these versions will be faster than the standard versions.
  • Fixed an issue where the Cygwin version of nmalloc was running slower than malloc.
  • Improved the implementation of the Cygwin version of the Platform API.
  • Fixed a bug that occurred when BinaryReader attempted to read a floating point number
  • Deleted the classes and files that had been deprecated within the heap library, and reorganized the classes.
    • The following were deleted: HeapBase, FixedMemoryHeap, and FixedMemoryHeapSet.
    • UnitHeap and FrameHeap were changed to become single-thread-specific.
  • Improved the classification and such of leads and sections in the reference documentation.
  • Made other minor changes and fixes.

2013-12-16

  • Improved the heap library.
    • Implemented a mechanism to detect 'double free' in CentralHeap. Also made it more difficult to overwrite, even illegally, pointers within the metadata.
    • Made it more difficult to unintentionally overwrite or illegally overwrite memory after mangling the pointers that make up the memory list for reallocation cached within CachedHeap.
    • Implemented a mechanism to reduce the impact within CentralHeap from overwriting memory after nfree.
    • Large-sized memory requirements are now carved out from the back of the memory, and small-size requirements are carved out from the front. This is expected to help prevent fragmentation.
    • By using the NMALLOC_HEAPOPTION_CHECK_1 option to create CentralHeap and CachedHeap, it becomes possible to denote two 16-bit added information units to allocated memory.
      • There is a practical example. Code that deallocates memory after calling a destructor that supports the type of the object for which there is a memory leak is found in the heap library's object_tracking sample.
    • Added the speeddemo sample.
      • The sample makes it easy to understand when to use custom allocators based on the speed of nmalloc.
    • The HeapBase::HEAPOPTION_ZEROCLEAR and HeapBase::DUBUGFILL functionalities were removed from CentralHeap and CachedHeap.
  • Increased the speed of the nn::nlib::msgpack::JsonReader class.
  • The executable binary for CAFE and CTR was revised to include an identifier indicating the use of bsdiff but only when the nn::nlib::oss::BsDiffZ or nn::nlib::oss::BsPatchZ functions are used.
  • Added the nlib_debug_backtrace and nlib_debug_backtrace_gettext functions.
  • Added the nlib_getenv function.
  • Improved the implementation of nlib_mutex for the Win32 version. Enabled the use of CRITICAL_SECTION when its use is possible.
    • This will, as a result, improve the performance of nmalloc in the Win32 version (particularly in the single-thread environment)
  • UTF-16- and UTF-32-related functions were defined for the global namespace. See Platform.h.
  • The following functions are deprecated: SizedEnum1, SizedEnum2, and SizedEnum4. They will be deleted at some point on or after the next release.
    • We will need to use the stronger enum type for C++11; there are not many benefits to using the deprecated items even in C++03.
  • nn::nlib::heap::FixedMemoryHeapSet has been deprecated. They will be deleted at some point on or after the next release.
  • The following functions are deprecated: HeapBase::AllocV, HeapBase::FreeV, and HeapBase::HasPtr. They will be deleted at some point on or after the next release.
    • In the future, the following classes defined in the heap library will no longer inherit the nn::nlib::heap::HeapBase and FixedMemoryHeap classes: StackHeap, FrameHeap, UnitHeap, and CentralHeap.
    • The nn::nlib::heap::FixedMemoryHeap class will be deleted.
    • Multi-thread versions of nn::nlib::heap::UnitHeap and nn::nlib::heap::FrameHeap will be deleted and will be replaced with a non-class-template single-thread-specific version. This is because the use of nmalloc, CachedHeap, and CentralHeap is more generic and efficient than the use of the thread-safe UnitHeap and FrameHeap.
  • The following headers were deprecated: nn/nlib/utility.h, nn/nlib/time.h, and nn/nlib/uriparser.h. They will be deleted at some point on or after the next release.
  • The generation of SSE2 code has been enabled in Win32, Cygwin, and Linux builds.
  • Added optimization for compiler branching predictions for compilers that can use __builtin_expect.
  • Configured a warning for when there has not yet been a check for invalid NULL arguments and return values when compiling for the nlib Platform API functions.
  • Made other minor changes and fixes.

2013-11-18

  • Added the oss library. This library is category I, so make sure that you follow the necessary procedures when using it.
  • Enabled the switching of memory allocation processes using functions such as nlib_malloc and nlib_free for memory allocation within nlib.
    • For a practical description see the heap library's replace_malloc sample.
    • By default, nlib_malloc can switch with malloc, nlib_free with free, and so on.
    • Switching cannot occur in the Cygwin version. This is because weak symbols cannot be used; the Cygwin version is not ELF.
  • Reincluded the binaries compiled with Visual Studio 2013.
  • Changed the version of Linux used for builds to Ubuntu 13.10.
  • Changed the version of gcc used for Cygwin builds to gcc 4.8.2.
  • It is now possible for a UniquePtr deleter object to have data members.
  • Made it possible to specify the allocator (function corresponding to realloc) used within ReallocVec.
  • Made it possible to specify the allocator (function corresponding to realloc) used within ReallocOutputStream.
  • Made it possible to specify the allocator (function corresponding to realloc) used within ZlibInputStream and ZlibOutputStream.
  • Implemented nn::nlib::heap::nmalloc_size for the heap library.
  • Added the nlib_thread_setaffinity function.
  • Added the nlib_thread_setname function.
  • Fixed a bug in nrealloc where a physical page could not be allocated.
  • Fixed a bug where the Platform.h and NMalloc.h header files were not compilable with the C compiler.
  • Made other minor changes and fixes.

2013-10-16

  • Reincluded binaries compiled with Visual Studio 2013 RC.
  • Added file operations functions.
  • Added --ntest_prefix to the testing library's command line arguments.
  • Added sample code to use the nn::nlib::UriTemplate class within the uri sample. Use of the UriTemplate class enables use of the URI Template (RFC6570).
  • Two functions for low-level output to the console were added: nlib_write_stdout and nlib_write_stderr.
  • The nlib_vsnprintf function was added to enable stabler handling than vsnprintf.
  • Functions like nlib_strcpy were added to be the corresponding of functions like strcpy_s.
  • Added the nlib_debug_break function.
  • Fixed an issue where the global SimpleCriticalSection constructor within the msgpack library might be initialized at the wrong time.
  • Removed class-type static variable and global variables (for all libraries except for the testing library).
  • Fixed an issue where argument values were not appropriately moved when launching a thread in C++11.
  • Made other minor changes and fixes.

2013-09-12

  • Began the release within Nintendo.
  • The PC version became usable without needing a link to Boost.
  • Deleted nn::nlib::g_FSClient from the CAFE version. A client will be created internally the first time the file I/O is used.
  • Changed the mutex used in the CAFE version from OSMutex to OSFastMutex and the conditional variables from OSCond to OSFastCond.
  • Deleted the socket library. For Win32, Linux, and Cygwin, socket is wrapped in winsock2 and bsd socket and then defined in Platform.h.
  • Made changes such that NLIB_PRINTF in the Win32 version will internally convert from UTF-8 to SJIS before displaying.
  • Added a datetime sample. It shows off the rich functionality of the nn::nlib::DateTime class.
  • Added a stringutils sample. It shows how to use the normalization features for nn::nlib::StringView and Unicode strings.
  • Added an nflags sample. The use of nn::nlib::Nflags enables simple processing of option strings for the command-line tool.
  • Made other minor changes and fixes.

2013-09-03

  • All libraries on the PC version, except for the socket library, can now be used without using Boost.
  • Threads, mutexes, semaphores, TLS, conditional and atomic variables have been defined as C-based API, and can now be used in C++ code.
    • They are defined in the Platform.h header file.
    • Mutexes and conditional variables supported static (delayed) initialization.
  • Improved the operating speed of nn::nlib::unicode::Utf8ToUtf32 and nn::nlib::unicode::Utf8ToUtf16.
    • Reviewed the implementation that used TextReader internally. Now converts directly.
  • Improved the operating speed of nn::nlib::unicode::Utf16ToUtf8 and nn::nlib::unicode::Utf32ToUtf8.
    • Reviewed the implementation that used TextWriter internally. Now converts directly.
  • Fixed a bug in the 2013-08-01 and 2013-08-07 versions where parsing of XML that included CRLF for a newline would not occur normally.
  • Deleted ThreadArg1, ThreadArg2, ThreadArg3, ThreadArg4, and ThreadArg5, which had all been deprecated.
  • Made other minor changes and fixes.

2013-08-07

  • Returned the CAFE (PPC) version of the XML parser's programming interface from char to wchar_t.

2013-08-01

  • Improvements and bug fixes for the exi library.
    • Partially increased the speed of XML loading.
    • Fixed a bug where, when ExiChar was of type char, parsing could mistakenly fail if there were characters other than ASCII characters in the element name.
    • Fixed a bug where an appropriate error was not returned when an error occurred as a result of insufficient memory.
      • Fixed a bug where blank Nlist begin and end functions didn't match in cases where there was insufficient memory.
  • Made other minor changes and fixes.

2013-07-24

  • Improved the exi library.
    • Can now configure an allocator for each instance of XmlStreamReader and XmlStreamWriter.
      • By creating an ExiAllocatorEx object and passing it to the Create functions for XmlStreamReader and XmlStreamWriter, you can use an allocator specific to the instance. It is also possible to continue using the share allocators.
  • Improved the heap library (for functions like nmalloc and nfree).

    • It is now possible to easily replace the default functions like malloc and free as long as you are in an environment that supports weak symbols.
      • By denoting the NLIB_USE_NMALLOC_AS_MALLOC macro in any one of the user program CPP files, it is possible (in all but MSVC) to replace the implementations of functions like malloc with those like nmalloc.
    • Implemented memory allocation using functions like VirtualAlloc and mmap for environments that support virtual memory.
      • Support in Windows and Linux.
      • The default heap is used instead of virtual memory in CAFE (PPC).
      • nn::os::MemoryBlock is used in place of virtual memory in CTR.
    • In Linux, we are testing the reliability and performance of nmalloc by setting the LD_PRELOAD environmental variable such that malloc functions in existing programs are dynamically replaced with calls to nmalloc functions.
      • Building nlib, replacing executions of malloc internal to cmake, clang, gcc, make, and so on, with nmalloc
      • Conversion of video in avconv
      • Execution of other various Unix commands and benchmark programs for malloc
    • Made other minor changes and fixes.

2013-07-05

  • Improved the heap library (for functions like nmalloc and nfree).
    • You no longer need to call nmalloc_init when the program starts.
    • You no longer need to call nmalloc_finalize when the program ends.
    • Calls to the nmalloc_finalize_tls function are no longer needed in Win32, Linux, or CAFE (PPC) (although there is no issue with calling it).
  • Implemented a thread pool.
  • Implemented a class to handle asynchronous file input and output.
    • nn::nlib::threading::AsyncFileIo. The same API is provided regardless of whether asynchronous input and output is in use in internal implementation.
    • Implemented using the asynchronous input and output provided by the Windows, Linux, and Cafe operating systems.
    • In all other cases, implemented such that it appears asynchronous after the issuing of synchronous file input and output in a hidden thread and then working from a user thread.
  • Modifications were made that eliminated the need for boost from the MSVC11 libraries in the PC version.
    • All MSVC11 libraries, except for socket, now run without boost.
  • Removed the use of std::vector and std::string from the succinct library.
  • Implemented StringView.
  • Implemented ReallocVec, ReallocQueue, and ReallocCstringVec.
    • Memory allocation, in addition to POD-specific vectors and queues occur in realloc (or in similar functions).
  • Implemented Nqueue. Nlist is used internally.
  • Partial support for the C++ 11 move constructor.
  • Modified the CAFE (PPC) version of the XML parser's programming interface from wchar_t to char.
  • Deleted ScopedPtr and ScopedArray.
  • Deleted the socket library from the CAFE (PPC) version.
  • Made the change from gcc 4.5.3 to gcc 4.7.3 for Cygwin builds,
  • Made other minor changes and fixes.

2013-06-03

  • In cases where __STDC_LIMIT_MACROS, __STDC_CONSTANT_MACROS, or __STDC_FORMAT_MACROS are undefined, made it such that they are defined in Config.h.
    • Definitions for INT32_MAX, PRIu64, and the like now use the definitions within the standard header, stdint.h.
    • It is preferable if these macros are defined in advance using compile switches within the makefile.
  • Newly compiled libraries for MSVC 10 and 11, for the PC version, are now available.
    • Current compiles use the Express version.
  • Implemented a reader/writer lock. The class name is nn::nlib::threading::SharedMutex.
  • Added a conditional variable fallback implementation.
    • The nn::nlib::threading::CondVarFallback class.
    • Implemented the Alexander Terekhov algorithm. Uses two of Semaphore and one of SimpleCriticalSection.
    • In environments in which conditional variables are not supported, the nn::nlib::threading::CondVar implementation enables their use.
  • Added a reinsertion lock fallback implementation.
    • nn::nlib::threading::CriticalSectionFallback
    • In environments where reinsertion locks are not supported, the nn::nlib::threading::CriticalSection implementation enables their use.
  • Implemented nn::nlib::threading::TimedCriticalSection and deleted nn::nlib::threading::Mutex.
    • In environments where timed reinsertion locks are not supported, nn::nlib::threading::TimedCriticalSectionFallback is used.
  • The functionality of nn::nlib::threading::Future was improved. For more information, see http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3558.pdf.
    • Added member functions to Then. Can be used to get multiple return values from multiple, separate, asynchronous threads, in the order they concatenate.
    • Added the WhenFutureComplete class. This class creates a Future to configure when values are set for all or some of multiple instances of Future. It can be used to bind multiple asynchronous processes.
    • The error state is now available with the GetError function. Asynchronous process is now able to explicitly return error states.
    • Added the MakeReadyFuture function.
  • You can now start threads in other ways besides function objects from nn::nlib::threading::Thread and function pointers such as lambdas.
    • The C++ compiler must support lambdas to use them.
  • Established nn::nlib::threading::ThreadArg<T1...> anew, deprecating ThreadArg1, ThreadArg2, ThreadArg3, ThreadArg4, and ThreadArg5. They will be deleted in an upcoming release.
  • Fixed the cmake script to conform to the boost library recognition issues in Cmake 2.8.11.
  • Made other minor changes and fixes.

2013-04-30

  • Added (client/server) support for JSON-RPC 2.0 to the msgpack library.
  • Added a socket wrapper library.
    • Only for the PC and CAFE versions.
    • TCP only.
  • Implemented AsciiReader and AsciiWriter. When working with ASCII text, these functions work more efficiently than using TextReader and TextWriter.
  • Added a detached field to ThreadSettings. When true, the thread will be in a detached state upon its start.
    • Implemented possible detachment only when threads begin, in the IOP environment.
    • Improved the workings of nn::nlib::threading::Async in the IOP environment.
  • Improved the testing library.
    • Added the --gtest_repeat command-line option.
    • Improved the timing for the running of --gtest_break_on_failure.
  • Fixed a bug where, when the XML parser ran out of memory in a location, it crashed without returning an error.
  • Fixed an error in operations when ThreadSettings was configured.
  • Deleted StringOutputStream and VectorOutputStream.
  • Deprecated ScopedPtr and ScopedArray. They will be deleted in an upcoming release.
  • Changed the sysPrintf used in the IOP environment to sysPrintfNoTimeStamp.
  • Added the nn::nlib::CodePointCount function.
  • Made other minor changes and fixes.

2013-03-15

  • Handled a conflict issue for nullptr. Moved the definition of nullptr to the nn::nlib namespace. Made it such that the macro definition is used when nullptr is macro-defined.

2013-03-14

  • Added a sample specific to future functionality.
  • Modified the length of the byte string such that it can be incorporated within the object's field when using MpObject (from 8 bytes or less to 14 bytes or less).
  • Added a fallback implementation (StrToFallback) for the StrTo function.
    • Implemented to not use functions such as strtol internally.
  • Added a fallback implementation (SnPrintfFallback) for the SnPrintf function.
    • Implemented to not use functions such as vsnprintf and vsnwprintf internally.
  • Enabled nn::nlib::threading::this_thread::Sleep to run in the IOP environment.
  • Updated the definition of nn::nlib::threading::Semaphore to suit IOP's system software, in the IOP environment.
  • Enabled the running of Barrier in the IOP environment through changes.
  • Improved the running of the StrTo function in the IOP environment. It can now use types including floating point.
  • Improved the running of the SnPrintf function in the IOP environment.
  • Enabled, through changes, the use of wide characters by the SnPrintf function in the IOP environment.
    • Used VsnPrintfFallback
  • Implemented nn::nlib::DateTime::GetNow in the IOP environment.
  • Fixed a bug that was causing new T[0] to fail every time in the IOP environment. This bug affected the succinct library.
  • Deleted the NLIB_HAS_SSCANF and NLIB_SSCANF macros.
  • Deleted the NLIB_HAS_VSNWPRINTF macro.
  • Made other minor changes and fixes.

2013-02-22

  • Added nn::nlib::threading::Future, nn::nlib::threading::Promise, nn::nlib::threading::PackagedTask, and nn::nlib::threading::Async. Respectively, these functions have features akin to future, promise, packaged_task, and async from the C++ 11 standard library, and enable the safe output and acquisition of thread execution results.
  • Added an overloaded version of the nn::nlib::threading::Thread::Start function.
  • When a JSON parse fails, the partial parsing results is now stored in MpObject.
  • When a MessagePack parse fails, the partial parsing results is now stored in MpObject.
  • Fixed a bug where days of the week for dates prior to 1 January 2000 were not output correctly by the nn::nlib::DateTime::ToRfc2822 function.
  • Fixed a bug in string conversion for the nn::nlib::DateTime::ToW3cDtf function.
  • Improved the implementation of iterator and const_iterator for nn::nlib::Nlist.
  • Fixed a bug where the nn::nlib::DateTime::GetNow function didn't work correctly in Cafe.
  • Fixed a bug in nn::nlib::threading::Thread in Cafe, where memory was illegally (too early) returned to the system when the destructor was called before finalizing the thread after detaching it.
  • Fixed a bug in MpObject where there was a risk of a memory leak when assigning a small (8 bytes or less) amount of byte data (such as a string) and there was already data within MpObject.
  • Made other minor changes and fixes.

2013-02-04

  • Implemented ReallocOutputStream.
    • Enables the safe creation of variable-length byte strings (errors are returned when there is insufficient memory), even in environments where exceptions are disabled.
  • Deprecated VectorOutputStream and StringOutputStream. Their use now triggers a warning.
    • The reason for this change is that there is an issue in environments where exceptions are disabled.
  • nn::nlib::threading::UniqueLock was newly implemented. nn::nlib::threading::ScopedLock was changed to a very simple implementation.
  • UniquePtr now supports array data (objects created with new[]). For example, it can be used like so: UniquePtr<char[]> ptr(new char[1024]).
    • ScopedPtr may be deprecated, because all of the functionality is included within UniquePtr.
  • Fixed the cause of a bug where the base stream was closed at the same time that XmlStreamWriter closed, when writing binary XML data. (Separated the base stream from XmlStreamWriter because nn::nlib::exi::XmlStreamWriter does not possess the base stream).
  • Fixed the cause of a bug where the base stream was closed at the same time that nn::nlib::msgpack::MpWriter closed.
  • Modified the workings of code that attempted to get stream data after the stream had been closed.
    • For example, made changes such that Pos now returns 0 if it is run after the stream has closed.
  • Changed some of the names of the member functions for ScopedLock, SimpleCriticalSection, and CriticalSection.
    • These changes help make the transition to the C++11 environment smoother.
  • Standardized the following types to match those of the C++11 standard library (as defined in typedef or a template alias) for the C++11 environment.
  • The following type inherits a C++11 standard library type.
    • For nn::nlib::threading::Mutex, there is std::recursive_timed_mutex.
  • Improved the exception safety of Nlist.
  • Made other minor changes and fixes.

2013-01-11

  • Implemented the nn::nlib::msgpack::MpWalker class, which can rapidly access the MessagePack data read into memory.
  • Added read and write options with nn::nlib::msgpack::JsonReader and nn::nlib::msgpack::JsonWriter.
  • The following functions now offer support as nn::nlib::Nlist containers: nn::nlib::msgpack::MpObject, nn::nlib::msgpack::MpReader, and nn::nlib::msgpack::MpWriter.
  • Changed the reference manual directory to documents/API/.
  • Added support for C++11. You can use the following C++11 features if the compiler supports them.
    • Null pointer constant
    • Static assertions
    • Defaulted and deleted functions
    • New character types (char16_t and char32_t)
    • Explicit conversion operators
    • Explicit virtual overrides
    • Template aliases
    • Extern templates
  • Added support for builds in clang++.
  • Defined wrapper functions in Cstring.h such that standard functions like strcpy, memcpy, strcat, and isdigit can be used more safely.
  • Made other minor changes and fixes.

2012-12-07

  • Implemented a container class (nn::nlib::Nlist<T>) that is similar to std::vector<T>. It can hold classes without copy constructors, and won't crash even if it encounters an out-of-memory error internally.
    • Objects are not relocated.
    • Because object copy constructors are not used within the container, classes without copy constructors can be held as elements.
    • For an out-of-memory instance, an error is returned instead of failing internally (such as by referencing a null pointer).
    • Memory efficiency is good, even when using a simple allocator (because relocation is not needed when adding objects).
    • Speeds for push_back are equal to or faster than those for std::vector (because in-place initialization is possible).
    • Added support for a forward iterator.
    • Access speeds are equal to those of std::vector when using an iterator for sequential access in the forward direction.
    • operator[](size_t idx) operates at \(O(\log idx)\) time.
  • Improved the binary and text XML parsers.
    • Improved the efficiency of the container used internally when parsing or creating XML.
    • You can now choose from wchar_t(UTF-16/UTF-32) or char(UTF-8) for the internal string type.
      • Until now, only wchar_t was available.
      • For the typedef, a type called ExiChar is used for the internal string type.
      • The internal string type can be chosen at the nlib build.
  • Improved msgpack::JsonReader
    • Improved the efficiency of operations for the container used internally when loading JSON arrays and associative arrays.
    • Made changes such that overflows and underflows for the double type now register as errors.
  • Improved msgpack::CsvReader.
    • Made changes such that overflows and underflows for the double type now register as errors.
  • Added handling for STR37-C (https://www.jpcert.or.jp/sc-rules/c-str37-c.html). Code for the following sections was revised.
  • Added partial handling of INT01-C (https://www.jpcert.or.jp/sc-rules/c-int01-c.html). Made changes to the code as follows such that the value of any arguments of type size_t are checked.
  • Made other minor changes and fixes.
    • Fixed and made related changes in situations where various error checks were missed.

2012-10-31

  • Implemented a decentralized definition command-line parser, nn::nlib::Nflags/
    • It is now possible to distribute definitions of command-line options among the various CPP files to add command-line options without having to change the way the main function is written.
    • Changed the specifications of the command-line options for the ac and nexiconv command-line tools.
    • Added the wf command-line tool. This tool creates a binary of the nn::nlib::succinct::WordFilter object from the list of detection terms and exceptions.
    • Removed the acmatch command-line tool.
  • Implemented UriTemplate. Added support for Level 3 of RFC 6570 (https://tools.ietf.org/html/rfc6570).
  • Implemented InputConverterStream and OutputConverterStream.
    • Streams that convert data internally now inherit these classes.
  • Implemented Utf32InputStream, Utf16InputStream, and WcharInputStream.
    • These streams convert wide string data to UTF-8.
  • Internally optimized InputStream and OutputStream.
  • Modified TextReader such that you can get the row and column for the current reading position.
  • Improved the efficiency of memory use when using a text XML parser.
    • Improved the allocation of memory when larger text nodes are loaded.
  • Implemented a wrapper function, StrTo, to safely use the following C standard functions in an integrated way: strtol, strtoul, strtoll, strtoull, and strtod.
  • Made other minor changes and fixes.

2012-10-05

  • Reimplemented and replaced DateTime and TimeSpan.
    • Enabled support for dates from 1 January 1, CE, to 31 December 9999, CE.
    • DateTime can now be configured by parsing date strings in the W3C-DTF and RFC2822 formats.
    • It is now also possible to generate date strings in the W3C-DTF and RFC2822 formats from DateTime.
    • In addition, functionality to add and subtract months was added.
  • Added streams that can read and write Base64 strings.
  • Implemented StringInputStream. This stream class produces output to std::string.
  • Improved the sample directory structure.
  • Added an HTML help version (nlib.chm) of this reference.
  • Made other minor changes and fixes.

2012-09-07

  • Created a new unicode namespace, and added Unicode-related functionality.
  • Implemented msgpack::CsvReader. Complies with RFC 4180 (https://www.ietf.org/rfc/rfc4180.txt).
  • Implemented StringOutputStream. This stream class produces output to std::string.
  • Changed the TextWriter specifications.
    • Changed the newline code that is output from CRLF to LF. CR and CRLF are now converted to LF before being output.
    • Made changes such that line buffering occurs for console output and block buffering occurs for all other cases.
  • Added typedefs for UTF-16 characters (utf16_t) and UTF-32 characters (utf32_t).
    • Entries were made in typedef for uint16_t and uint32_t, respectively. For C++11, there will be typedef entries for char16_t and char32_t.
  • Features were added to TextWriter.
    • Overloads for the utf16_t and utf32_t types were added to the argument types for the Write member functions. It is now possible to pass UTF-16 and UTF-32 characters.
  • Moved the SmartBitmap class to the nn::nlib namespace, moving it from the succinct library to the misc library.
  • Fixed bugs for the exi library.
    • Fixed an issue where loading would fail when a CR was included for a newline within a text node in binary XML.
    • Fixed it such that the newlines within text nodes are converted to LF for reading and writing.
  • Made other minor changes and fixes.

2012-08-02

  • Added the testing library.
    • Many of the Google Test (https://code.google.com/p/googletest/) macros (such as ASSERT_EQ) work the same way.
    • It is now possible to output XML in JUnit format (which becomes a graph when read in Jenkins)
    • Can be used even in environments where new cannot be used before the main function and where std::ostream cannot be used.
  • Added features and fixes to the succinct library.
  • Added classes to the misc library.
    • Added the ScopedArray class. This version supports ScopedPtr arrays.
    • Added the UniquePtr class. This class is ScopedPtr with a release function.
  • Improved error checking in Unicode-related functions.
  • Made changes to avoid the use of std::auto_ptr (for C++11).
  • Added the exi/multithread sample.
  • Removed the Alarm class and the misc/alarm sample from the misc library.
  • Made other minor changes and fixes.

2012-06-22

  • Added the MessagePack and JSON parser libraries.
  • Changed the type of TextReader and TextWriter's error value to errno_t.
  • Changed the type of BinaryReader and BinaryWriter's error value to errno_t.
  • Added nn::nlib::Utf8ToUtf32, nn::nlib::Utf8ToUtf16, nn::nlib::Utf32ToUtf8, and nn::nlib::Utf16ToUtf8.
  • Modified TextWriter to enable it to write multibyte strings.
  • Revised the reference manuals.
  • Made other minor changes and fixes.

2012-05-30

  • Improved compliance with XML 1.0 standards in the text XML parser.
    • The parser was fixed such that when a DTD is detected, it skips past it instead of treating it as an error.
    • An EntityRef entry is now treated not as an error but as a blank string.
    • Implemented a syntactical check within the XML declaration.
    • A space before the XML declaration is now treated as an error.
    • No space between attributes is now treated as an error (for example, <e a0 = "b"a1="c"/>).
    • In addition, improved the results specific to the test data found at http://www.w3.org/XML/Test/.
  • Implemented the TaggedTextParser class (a parser for XML-style tagged text).

2012-05-18

2012-05-11

  • The XML parser samples script, serializer, simple1, and xml-rpc now work in IOP.
  • Added the cachedheap sample to directly handle heaps that implement nmalloc in the heap library.
  • Added conversion functions to go back and forth between UTF8 and UTF16 or UTF32. They are, respectively, the nn::nlib::Utf8ToWide and nn::nlib::WideToUtf8 functions.
  • Added the nn::nlib::Crc32 class to perform Crc32 calculations.
  • Added a postscript mode to FileOutputStream. Refined the error return values.
  • Added a formatted output member function (WriteFormat) to the TextWriter class.
  • Added a proprietary implementation of realloc for IOP (and it's slow). This implementation is for the heap library's nmalloc_realloc sample.
  • Fixed TextWriter so that the base stream is flushed by a newline.
  • Fixed a bug where closing with ConsoleOutputStream did not result in a flush.
  • Added references to the readfile and writefile samples.
  • Made other minor fixes.

2012-05-02

  • FileInputStream and FileOutputStream now work in IOP.
  • Added the misc/readfile and misc/writefile samples.
  • The succinct/detection and succinct/ngc samples now work in IOP.
  • Made other minor fixes and changes.

2012-04-27

  • Added library files and a command-line tool for Win32.
  • Implemented FileOutputStream and deprecated PcFileOutputStream (because it does not yet work in IOP).
  • Implemented FileInputStream and deprecated PcFileInputStream (because it does not yet work in IOP).
  • Changed the OutputStream error value type to errno_t.
  • Changed the type of InputStream's error value to errno_t.
  • Fixed a bug in endian support when reading and writing array data with InputStream and OutputStream.
  • Fixed a bug where ScopedPtr would result in an error for incomplete types.
  • Added the nmalloc_simple sample to note the method for replacing malloc.
  • Made other minor fixes and changes.