nlib
|
Windows, Linux, FreeBSD, OS X, Cygwin及び任天堂の開発環境に対応したライブラリの集合です。
nlib
はWindows, Linux, FreeBSD, OS X, Cygwin及び任天堂の開発環境に対して同一のI/Fを利用したプログラミングが可能な、ユーザーランド上で動作するライブラリ群を提供することを目的として開発されています。 開発はsoftware centricに行われ、適切で現実的なコーディングルール(nlibのコーディングルール)と個別の開発環境からの独立性が確保されたI/Fと実装によって、複数の開発環境に対して同時並行的に高い品質と性能及び信頼性を維持しつつ行われることにフォーカスしています。Platform | Library types | Remarks | ||
---|---|---|---|---|
Windows | Visual Studio 2015 | 64bit | static library, DLL | Update 3 |
32bit | static library | |||
Visual Studio 2013 | 64bit | static library, DLL | Update 5, Express Edition is available | |
32bit | static library | |||
Visual Studio 2012 | 64bit | static library, DLL | Update 5, Express Edition is available | |
32bit | static library | |||
Cygwin | 64bit | static library | gcc 5.4.0, newlib, libstdc++ | |
Bash on Ubuntu on Windows | 64bit | shared library | gcc 4.8.4, clang 3.4, glibc, libstdc++ | |
Linux | Ubuntu 16.04 LTS | 64bit | shared library | gcc 5.3.1, clang 3.8, glibc, libstdc++, https://atlas.hashicorp.com/ubuntu/ |
Ubuntu 14.04 LTS | 64bit | gcc 4.8.4, clang 3.4, glibc, libstdc++, https://atlas.hashicorp.com/ubuntu/ | ||
32bit | ||||
CentOS 7 (v1608.01) | 64bit | gcc 4.8.5, glibc, libstdc++, https://atlas.hashicorp.com/centos/ | ||
Fedora 24 | 64bit | gcc 6.1.1, clang 3.8, glibc, libstdc++. https://atlas.hashicorp.com/fedora/ | ||
Alpine 3.4.0 | 64bit | gcc 5.3.0, musl libc, libstdc++, https://atlas.hashicorp.com/maier | ||
FreeBSD | FreeBSD 11.0 | 64bit | shared library | clang 3.8, BSD libc, libc++, https://atlas.hashicorp.com/freebsd |
OS X | OS X 10.11 (El Capitan) | 64bit | shared library | Xcode 8.0 |
CTR | CTR-SDK 11.5 | 32bit | static library | CTR_SDK-11_5_1-20160622-ja.zip armcc_4_1_nintendo-b1454-20150227.zip |
Cafe | CafeSDK 2.13.01 | 32bit | static library | cafe_sdk-2_13_01-20150728.zip MULTI-5_3_26-20150918.zip |
nlib
のアップデートによるトラブルを回避するためにも役に立ちます。 そのような受け入れテストの作成にtesting
ライブラリを利用するのはよい考えです。 nn::nlib::testing
形式のテストコードとして記述してそれを報告に含めると迅速に修正されるかもしれません。├── bin │ └── cmake # Command-line tools ├── cmake # Common Cmake scripts ├── documents-ja(documents-en) │ └── API # Reference Manual │ ├── html # HTML version of the Reference Manual │ └── searchdata.xml # Search index ├── include # Include files (in `system/include` for Cafe) │ ├── nn │ │ └── nlib │ │ ├── exi │ │ ├── heap │ │ ├── msgpack │ │ │ └── jsonrpc │ │ ├── oss │ │ ├── simd │ │ ├── succinct │ │ ├── testing │ │ ├── threading │ │ └── unicode │ ├── lz4.h │ ├── lz4hc.h │ ├── lz4frame.h │ ├── sqlite3.h │ └── sqlite3ext.h ├── lib # Platform-specific library files (`system/lib` for Cafe, `libraries` for CTR) ├── samples # Source code for samples │ ├── cmake │ └── sources │ ├── exi │ ├── heap │ ├── misc │ ├── msgpack │ ├── oss │ ├── succinct │ └── testing └── setup ├── nlib.natvis ├── setup-bash-ubuntu-windows-tools.sh ├── setup-cygwin-tools.sh ├── setup-msvc-libraries.sh └── setup-vagrant-plugins.sh
nlib_epochtime()
他) nlib_gen_random()
) nlib_thread
)およびその開始や合流他 nlib_mutex
) nlib_cond
) nlib_tls
) nlib_barrier
) nlib_once()
, nlib_tryonce()
) nlib_rwlock
) nlib_condrwlock
) nlib_mq
) nlib_atomic_compare_exchange32()
他) nlib_debug_break()
, nlib_debug_backtrace()
他) nlib_getenv()
) nlib_fd_open()
他) strtol()
やstrtoll()
といったC標準関数を誤用しにくい形にラップした関数(nlib_strto_int32()
他) ctype.h
で定義されるC標準関数をロケールの影響を受けない形で実装した関数(nlib_isspace()
他) snprintf()
, snwprintf()
とその類似関数の環境毎の挙動の違いを抑制し、誤用しにくい形にした関数(nlib_snprintf()
他) nlib_swapendian_32()
他) nlib_crc32()
, nlib_crc32c()
) nlib_popcnt64()
他) InputStream
, OutputStream
を基底とする各種ストリームを扱うためのクラス群 MemoryInputStream
, MemoryOutputStream
) FileInputStream
, FileOutputStream
) Base64InputStream
, Base64OutputStream
) zlib
で圧縮されたデータの読み書き(ZlibInputStream
, ZlibOutputStream
) TextReader
, TextWriter
) BinaryReader
, BinaryWriter
) unicode::UnicodeNormalizer
) unicode::StringPrep
) libn
ライブラリで定義された型と関数のラッパクラス std::thread
に相当するクラス(threading::Thread
) std::future
, std::async
等に相当するクラスや関数(threading::Future
, threading::Async
) threading::ThreadPool
) Uri
) UriTemplate
) NativePathMapper
) threading::AsyncFileIo
) LockFreeInit()
) LockFreePipe
) LockFreeStack
) LockFreeQueue
) LockFreePriorityQueue
) LockFreeBroadcastQueue
) std::unique_ptr
代替クラス(UniquePtr
)。C++11ではstd::unique_ptr
にtypedef
される。 Singleton
, SimpleSingleton
) std::vector
類似クラス(Nlist
) Nflags
) HandleMaker
) nn::nlib
, nn::nlib::unicode
, nn::nlib::threading
です。nn::nlib::exi
です。nmalloc()
/nfree()
(とそれらを実装するheap::CachedHeap
, heap::CentralHeap
)は、多段のフリーリストを利用することでフラグメンテーションの抑制を行い、性能の劣化を抑えています。 また、小さいサイズのメモリの場合は各スレッド毎にキャッシュを保持することにより、ロックをかけずにメモリの割り当てと解放が可能になっていてマルチスレッドでの性能劣化を抑制しています。 フリーリスト内のポインタはマングルされているか割り当て状態がチェックされていて、外部からのメモリの書き換えによる不正利用が行いにくいように実装されています。nn::nlib::heap
及びグローバル名前空間(Cリンケージの関数)です。succinct
ライブラリは以下のものを含みます。 nn::nlib::succinct
です。msgpack
ライブラリは以下のものを含みます。 nn::nlib::msgpack
です。nn::nlib::testing
(googletestとの互換性のためtesting
名前空間にエイリアスされている)です。misc
ライブラリに依存します。nn::nlib::oss
及びグローバル名前空間(Cリンケージの関数)です。simd
ライブラリは、SSE4.2とNEONに両対応したコードを記述するためのライブラリです。nn::nlib::simd
です。nlib
の各ライブラリ間の依存関係は下図のようになります。
nlib
ではコンパイラの種類やバージョンによって、C++11の機能を利用してコンパイルされています。 以下にC++11の機能とnlib
で利用できる互換用マクロ等、及びC++11を利用してコンパイルされる コンパイラについて表にまとめておきます。 なお、clangについてはバージョンではなく__has_feature()
マクロ及び__has_include()
マクロによって判定されます。 C++11の機能 | 識別用マクロ | C++03互換用マクロやtypedef等 | Visual Studio | gcc |
---|---|---|---|---|
Rvalue references | NLIB_CXX11_RVALUE_REFERENCES | なし | 2010 | 4.3 |
Variadic templates | NLIB_CXX11_VARIADIC_TEMPLATES | なし | 2013 | 4.7 |
Static assertions | NLIB_CXX11_STATIC_ASSERTIONS | NLIB_STATIC_ASSERT() | 2010 | 4.3 |
Null pointer constant | NLIB_CXX11_NULL_POINTER_CONSTANT | nn::nlib::nullptr, nn::nlib::nullptr_t | 2010 | 4.6 |
Deleted functions | NLIB_CXX11_DEFAULTED_AND_DELETED_FUNCTIONS | NLIB_DISALLOW_COPY_AND_ASSIGN() | 2015 | 4.4 |
Explicit conversion operators | NLIB_CXX11_EXPLICIT_CONVERSION_OPERATORS | NLIB_SAFE_BOOL() | 2013 | 4.6 |
Alias templates | NLIB_CXX11_TEMPLATE_ALIAS | なし | 2013 | 4.7 |
constexpr | NLIB_CXX11_CONSTEXPR | NLIB_CEXPR | 2015 | 4.7 |
char16_t, char32_t | NLIB_CXX11_NEW_CHARACTER_TYPES | nlib_utf16_t, nlib_utf32_t | 2015 | 4.4 |
alignas | NLIB_CXX11_ALIGNMENT_SUPPORT | NLIB_ALIGNAS() | 2015 | 4.8 |
Explicit virtual overrides | NLIB_CXX11_EXPLICIT_VIRTUAL_OVERRIDES | NLIB_OVERRIDE | 2012 | 4.7 |
final | NLIB_CXX11_EXPLICIT_VIRTUAL_OVERRIDES | NLIB_FINAL | 2012 | 4.7 |
noexcept | NLIB_CXX11_NOEXCEPT | NLIB_NOEXCEPT | 2015 | 4.6 |
Range-based for | NLIB_CXX11_RANGE_BASED_FOR | なし | 2012 | 4.6 |
lambda | NLIB_CXX11_LAMBDAS | なし | 2012 | 4.7 |
Delegating constructors | NLIB_CXX11_DELEGATING_CONSTRUCTORS | なし | 2013 | 4.7 |
std::unique_ptr | NLIB_CXX11_UNIQUEPTR | nn::nlib::UniquePtr | 2013 | 4.7 |
#include <random> | NLIB_CXX11_STDLIB_RANDOM | なし | 2013 | 4.8 |
#include <chrono> | NLIB_CXX11_STDLIB_CHRONO | nn::nlib::DateTime との変換 | 2012 | 4.7 |
#include <atomic> | NLIB_CXX11_STDLIB_ATOMIC | NLIB_MEMORY_ORDER_SEQ_CST 等 | 2012 | 4.8 |
#include <array> | NLIB_CXX11_STDLIB_ARRAY | なし | 2012 | 4.5 |
#include <unordered_map> #include <unordered_set> | NLIB_CXX11_STDLIB_UNORDERED | なし | 2012 | 4.5 |
#include <tuple> | NLIB_CXX11_STDLIB_TUPLE | なし | 2012 | 4.5 |
nlib
のコーディングルールは、(最新の)Google C++ Style Guide(若干古いが日本語訳)に若干の変更と緩和を行ったものになっています。 コーディングルール | Google C++ Style Guide | nlib |
---|---|---|
行の長さ | 80 | 100 |
インデント | 2 | 4 |
パラメータの順序 | 入力が先で出力が後 | 出力が先で入力が後 |
デフォルト引数 | 原則として禁止 | 以下の場合以外では利用可能。
|
ファイル名 | file_name.cc | FileName.cpp(サンプルではfile_name.cpp) |
インクルードガード | 更に#pragma once をつける(Visual Studioでのコンパイル高速化のため) | |
Boostの利用 | ライブラリ本体では利用しない(テスト等では自由) | |
アクセサ関数名 | get_xyz() / set_xyz() | GetXyz() / SetXyz() |
参照型の引数 | 非const参照は禁止 | nlib では以下については例外的に非const参照を利用可能にしている
|
C++11の利用 | ヘッダ、及びソースコードはC++03のコンパイラでもコンパイルできるようにしておくこと。
| |
nullptr | C++11なら利用 | C++03が使われているうちは、原則としてnullptr_t やnullptr を使わないこと
|
constexpr | C++11なら利用 | 当分の間、constexpr の利用は自明なケース以外では見合わせること
|
コメント |
|
legal/copyright
, build/include_alpha
, whitespace/newline
による警告は抑制されている。 std::swap()
の利用に際してヘッダalgorithm
のインクルードは要求されないよう緩和している。 nlib
はclang-check
によるソースコードの検査にも対応しています。 cmakeでMakefileを生成すると、compile_commands.jsonというファイルが一緒に作成され、clang-checkはこれを利用して動作します。 nlib
で用いている設定が .clang-format
ファイル(clang3.5用です)としてnlib
のパッケージに含まれていて利用することが可能です。 まず、clang-format
で一括してソースコードの大まかな変換を行い、cpplint.py
でより細かい日常的なチェックを行うことをおすすめします。_MSC_FULL_VER
をチェックすること。 -Wstack-usage=65536
を利用し、スタックを使い過ぎないようにすること。 -fstack-protector
を利用すること。 cpplint.py
の警告をゼロにし、各種環境でのコンパイルとテストを通すことがnlib
の基本的なリリース基準になっています。Platform.h
で定義される関数の宣言や実装以外のコードは利用する可能性のある全環境でコンパイルできるコードで記述されている必要がある。ただしSIMD命令等によって機種別に最適化されたコードが含まれることは容認される。 NLIB_FINAL
, NLIB_OVERRIDE
等のマクロやtypedef
を利用してC++11の機能を安全に導入し、C++11やC++14以降への連続的な移行を可能にすること。 errno_t
とすること(https://www.jpcert.or.jp/sc-rules/c-dcl09-c.html)。nlib
を利用する側のコードがこれらを利用する場合を想定したコードを記述すること(例外安全性等)。 malloc()
, free()
等はnlib_malloc()
, nlib_free()
等を利用すること。 new
は、new (std::nothrow)
を利用すること。 nlib_printf()
に渡す文字列はnlib
内部でUTF-16に変換された上でWin32 APIに渡されている。 Nflags
)は例外 char
型が符号付きでも符号無しでも正常に動作するようにしておくこと。 signed
char
を用いれば明示的に符号付きの値として扱うことができる。 wchar_t
に関してはwchar_t
が16bitの場合はUTF-16として、32bitの場合はUTF-32としてサポートすること。 NLIB_WCHAR_SIZE
が2か4のいずれかに定義されるのでそれで判断することができる。 nlib_utf16_t
, UTF-32文字の型には nlib_utf32_t
を利用すること。 char16_t
, char32_t
のtypedef
となる。 nlib_strcplen_ex()
を使うことにより、validationを行いつつコードポイント数とバイト長を同時に求めることができる。更にSIMDがサポートされている場合にはこの動作をより高速に行うことができる。 NLIB_CXX11_RVALUE_REFERENCES
で切り分けられたコード内での定義の他に、C++03でも同等の機能を実現できるよう、以下のようなメンバ関数を定義しなければならない。 boost::move
のような素晴らしい手法も存在するが、結局完全な互換性は達成できないのでこの手法は利用しない。 type_traits
の利用は慎重に行うこと。C++11のこの機能はコンパイラやそのバージョンによってバグがあったり実装が抜けていたり、といったことがある。 nn/nlib/TypeTraits.h に一応のラップが行われているが、やむを得ない場合にのみ利用すること。 NLIB_DISALLOW_COPY_AND_ASSIGN()
を使うこと。 .h
形式のものをインクルードすること。理由は以下の2つ。 nn/nlib/Platform.h
はCコンパイラでコンパイル可能である必要があることから、xxx.h
形式のヘッダをインクルードする必要があるため、nlib内部でxxx.h
形式とcxxx
形式の両方の形式でインクルードすることに起因するコード上の混乱を抑制するため。 testing
ライブラリを利用することが可能である。 manual.h
というファイルを配置して、そこに記述すること。英語版のマニュアルの場合はmanual_en.h
である。こうすることで複数言語版を同じレポジトリで管理することができる。 CMakeLists.txt
というファイルが含まれていることに気づいた方も多いと思います。 cmakeを利用すると、このCMakefiles.txt
というスクリプトファイルを記述することで、GNU makeのMakefileやVisual Studio及びXcodeのプロジェクト等を生成することが可能です。 nlib
ではcmakeを利用することで、Visual Studioの各バージョンに対応したソリューションファイル,Unix, Cygwin用のMakefile等を生成しプログラムをビルドすることが可能となります。 ./cmake/toolchain-cafe.cmake
, ./cmake/toolchain-ctr.cmake
ファイルにクロスコンパイル用の各種設定がされていて、CAFE/CTR版のサンプルプログラムもcmakeを利用してMakefileを生成し、ビルドすることが可能です。 なお、nlib
のCAFE版及びCTR版には標準のmake, omake用のスクリプトも用意されています。nlib
を利用する際によく遭遇する状況と対処法について説明します。nlib
はメモリの確保にはnew (std::nothrow)
を利用しています。 アプリケーション、又は他のライブラリでnew/delete
をオーバーロードする場合には、operator new(size_t, const std::nothrow_t&)
もオーバーロードする必要があります。 nlib
はmalloc, free
を直接使うことはしていません。代わりにnlib_malloc()
, nlib_free()
等を利用します。 これらの関数はweak関数として定義されていてユーザーが定義することで置き換え可能です。 cmake/common.cmake.win32
等のファイルにプラットフォーム毎のスイッチ等の定義が記述されています。 参考にしてください。nlib
を利用するプロジェクトの判断に委ねられます。 受け入れテストを記述しておくことで、そういった判断をより容易にすることができます。 ただし、サポートの対象となるのは最新版のみです。ご了承ください。nlib
を利用するプロジェクト側においてnlib
のパッケージを再構成、再パッケージを行いプロジェクト内においてのみ再配布することが認められています。nlib_printf()
の入力文字列はUTF-8である必要があります。oss
ライブラリに収録されているSQLiteをバージョン3.14.1にアップデートしました。 nlib_bitreverse32()
とnlib_bitreverse64()
が実装されました。 nlib_fd_open()
でO_EXCL(NLIB_FD_O_EXCL)
の指定が可能になりました。 nlib_fd_create()
が失敗するように変更しました。 nlib_strcplen2()
がnlib_strcplen()
にリネームされました。nlib_strcplen2()
は暫くのあいだマクロとして提供された後に削除されます。 nlib_popcnt()
がnlib_popcnt32()
にリネームされました。nlib_popcnt()
は暫くのあいだマクロとして提供された後に削除されます。 nlib_clz()
がnlib_clz32()
にリネームされました。nlib_clz()
は暫くのあいだマクロとして提供された後に削除されます。 nlib_ctz()
がnlib_ctz32()
にリネームされました。nlib_ctz()
は暫くのあいだマクロとして提供された後に削除されます。 heap::CentralHeap::FreeWithSize()
, heap::CentralHeap::GetAllocSize()
, heap::CentralHeap::Realloc()
が追加されました。 nmalloc_query()
のクエリにNMALLOC_QUERY_SET_COLOR
, NMALLOC_QUERY_GET_COLOR
, NMALLOC_QUERY_SET_NAME
, NMALLOC_QUERY_GET_NAME
を追加しました。割り当てられた4096バイト以上の任意の領域に対して24bit整数値や文字列を関連付ける機能です。 利用方法はheap
ライブラリのobject_tracking
サンプルを参考にしてください。 NMallocDumpMode
にNMALLOC_DUMP_PAGESUMMARY
を追加しました。 nmalloc
等の動作の不備を改善しました。 nmalloc_setmark1()
, nmalloc_setmark2()
, nmalloc_getmark()
, nmalloc_getobjptr()
がdeprecatedとなりました。将来のリリースで削除されます。 NMALLOC_HEAPOPTION_CHECK_0
, NMALLOC_HEAPOPTION_CHECK_1
がdeprecatedとなりました。将来のリリースで削除されます。 nlib_memcplen()
, nlib_memutf8_to_utf16()
, nlib_memutf16_to_utf8()
, nlib_memutf8_to_utf32()
, nlib_memutf32_to_utf8()
を追加しました。 nlib_strcplen2()
が追加されました。nlib_strcplen()
およびnlib_strcplen_ex()
はdeprecatedとなりました。将来のリリースにおいて削除されます。 nlib_basename()
, nlib_dirname()
を追加しました。 nlib_strlcpy()
を追加しました。 nlib_memccpy()
を追加しました。 nlib_memspn()
, nlib_memcspn()
を追加しました。 nlib_strcat()
, nlib_strncat()
, nlib_wcscat()
, nlib_wcsncat()
がdeprecatedになりました。将来のリリースにおいて削除されます。 nn::nlib::StrCat()
, nn::nlib::StrNcat()
がdeprecatedになりました。将来のリリースにおいて削除されます。 misc
ライブラリからグローバル名前空間で宣言されるCリンケージの関数(nlib_sleep()
など)が分離され、libn
ライブラリとなっています。 lib/cmake/gcc
からlib/cmake/cygwin
に変更されています。 nlib_isalnum()
, nlib_isalpha()
, nlib_iscntrl()
, nlib_isdigit()
, nlib_isgraph()
, nlib_islower()
, nlib_isprint()
, nlib_ispunct()
, nlib_isspace()
, nlib_isupper()
, nlib_isxdigit()
, nlib_tolower()
, nlib_toupper()
が追加されました。 IsAlnum()
等がdeprecatedになりました。 nlib_strto_int32()
, nlib_strto_int64()
, nlib_strto_uint32()
, nlib_strto_int64()
, nlib_strto_double()
, nlib_strto_float()
, nlib_strto_int32_fallback()
, nlib_strto_int64_fallback()
, nlib_strto_uint32_fallback()
, nlib_strto_int64_fallback()
, nlib_strto_double_fallback()
, nlib_strto_float_fallback()
, nlib_strto_int8()
, nlib_strto_int16()
, nlib_strto_uint8()
, nlib_strto_uint16()
が追加されました。 StrTo()
とStrToFallback()
がdeprecatedになりました。 nlib_epochtime_timespec()
, nlib_ticktime_timespec()
, nlib_sleep_timespec()
, nlib_mutex_trylock_for_timespec()
, nlib_semaphore_trywait_for_timespec()
, nlib_cond_wait_for_timespec()
, nlib_cond_wait_until_timespec()
, nlib_rwlock_tryrdlock_for_timespec()
, nlib_rwlock_tryrdlock_until_timespec()
, nlib_rwlock_trywrlock_for_timespec()
, nlib_rwlock_trywrlock_until_timespec()
, nlib_condrwlock_wait_for_timespec()
, nlib_condrwlock_wait_until_timespec()
が追加されました。 nlib_fd_open()
は引数仕様が変更され、最後の引数の型がvoid*
型ではなくint
型になり、アクセス許可を指定するように変更されました。 nlib_thread_setname()
は引数仕様が変更され、名前を変更するスレッドが指定できるようになりました。 heap
ライブラリのheap::CentralHeap
(nmalloc)
の動作を更に改善しました。 lib/cmake/gcc
からlib/cmake/cygwin
に変更されます。 nlib_remove()
, nlib_thread_getname()
が追加されました。 heap
ライブラリのheap::CentralHeap
(nmalloc)
の動作を改善しました。 heap
ライブラリのheap::CentralHeap
(nmalloc)
で比較的大きなサイズ(4KB以上)のメモリを割り当てた場合のフラグメンテーション問題を緩和しました。 oss
ライブラリに収録されているSQLiteをバージョン3.12.2にアップデートしました。また、テンポラリファイルが削除されるようになりました。 nlib_fd_pwrite()
およびnlib_fd_pread()
において、ファイルサイズより大きいオフセットを指定した場合の動作を修正しました。 simd::I64
がdeprecatedになりました。 Crc32
クラスがdeprecatedになりました。nlib_crc32()
またはnlib_crc32c()
を利用してください。 misc
ライブラリにnlib_compiler_version()
関数を追加しました。nlibのコンパイルに利用されたコンパイラのバージョンを返します。 misc
ライブラリにnlib_crc32()
, nlib_crc32c()
関数を追加しました。 simd
ライブラリに以下の関数を追加しました。 simd
ライブラリのNEON版コードの動作速度を改善しました。 oss
ライブラリがnmalloc
ではなくnlib_malloc
を利用するようになりました。 heap
ライブラリのnmalloc_query()
の引数に、NMALLOC_QUERY_UNIFY_FREELIST
を指定できるようになりました。 heap
ライブラリのCentralHeap
が保持するヒープ内のメタデータの断片化を緩和しました。 simd
ライブラリにsimd::I128::PopCntMask8()
, simd::I128::ClzMask8()
, simd::I128::CtzMask8()
を追加しました。 nlib_malloc_size()
が利用できない問題を修正しました。 nlib_is_error()
関数が追加されました。errno_t
やbool
の戻り値に対して、エラー判定の記述を紛らわしくない形で行うことができます。 nlib_getenv()
関数がCAFE及びCTRに対応しました。 IsOk()
, IsError()
関数がdeprecatedになりました。nlib_is_error()
関数かoperator bool()
関数を利用してください。 misc
ライブラリのUtf16InputStream
, Utf32InputStream
, WcharInputStream
, Base64InputStream
, Base64OutputStream
にInit()
メンバ関数が追加されました。 misc
ライブラリのTextReader
, TextWriter
, BinaryReader
, BinaryWriter
クラスの初期化がInit()
とOpen()
の2段階に分割されました。 exi
ライブラリ内のクラスのIsOk()
, IsError()
, Initialize()
, GetErrorValue()
メンバ関数がdeprecatedになりました。 heap
ライブラリ内のクラスのInitialize()
メンバ関数がdeprecatedになりました。 msgpack
ライブラリのCsvReader
クラスの初期化がInit()
とOpen()
の2段階に分割されました。 nmalloc_aligned()
で4096バイトより大きいアラインメントでメモリを割り当てると、クラッシュする場合がある不具合を修正しました。 nmalloc_query(NMALLOC_QUERY_MAX_ALLOCATABLE_SIZE, ...)
が実際に割り当てられるサイズよりも大きいサイズを返す場合がある問題を修正しました。 simd
ライブラリのF128::StoreLoA4()
, F128::StoreHiA4()
がARM プロセッサ上での実行時にクラッシュする場合があるという問題を修正しました。 © 2012-2016 Nintendo Co., Ltd. All rights reserved.