nlib
Past Revision Histories

List

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

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.