nlib
nn::nlib 名前空間

共通して使われることの多いストリーム関連のクラス群や各種コンテナ、及びガシェットクラスが実装されています。nlib_nsはエイリアスです。 [詳解]

名前空間

 binary_reader
 BinaryReaderクラスでユーザー定義クラスに読み込むために利用する関数が定義されています。
 
 binary_writer
 BinaryWriterクラスでユーザー定義クラスを書きこむために利用する関数が定義されています。
 
 exi
 バイナリXMLパーサー(とXMLパーサー)が実装されています。
 
 handle_maker
 HandleMakerクラスをカスタマイズするための関数テンプレートが定義されている名前空間です。
 
 heap
 heapライブラリの名前空間です。nmalloc(), nfree()等はグローバル名前空間に定義されています。
 
 msgpack
 JSON/msgpackのパーサー及びライター、JSON Pointer、JSON Patch、JSON Schemaのサポート等が実装されています。
 
 oss
 オープンソース・ソフトウェア(OSS), OSS派生コード, 及びOSSにアクセスするためのライブラリが実装されています。
 
 simd
 整数、単精度浮動小数点数のSIMD演算を行うためのクラスや関数が実装されています。
 
 succinct
 ビットベクトルに関する簡潔データ構造クラスのライブラリが実装されています。
 
 testing
 C++のコードをテストするためのフレームワークです。testingライブラリの機能一覧 の説明も御覧ください。
 
 threading
 スレッド関連のクラスや関数が実装されています。
 
 unicode
 ユニコード関連の機能が実装されています。
 

クラス

class  Base64Decoder
 Base64のデコードを行います。Base64の各種変形版をサポートします。 [詳解]
 
class  Base64Encoder
 Base64のエンコードを行います。Base64の各種変形版をサポートします。 [詳解]
 
class  Base64InputStream
 Base64でエンコードされたデータを読み込むためのクラスです。 [詳解]
 
class  Base64OutputStream
 データをBase64でエンコードして書きこむためのクラスです。 [詳解]
 
class  BinaryReader
 ストリーム(InputStream)からバイナリを読み込むクラスです。 [詳解]
 
class  BinaryWriter
 ストリーム(OutputStream)にバイナリを書き込むクラスです。 [詳解]
 
class  ConsoleOutputStream
 nlib_printfを利用して文字列としてコンソールに出力するストリームを作成します。 [詳解]
 
class  ConstructorForLockFree
 オブジェクトを初期化するためのクラステンプレートです。特殊化して利用します。 [詳解]
 
class  CurlInputStream
 libcurlを用いてダウンロードを行うためのストリームクラスです。 [詳解]
 
class  DateTime
 日時を表すクラスです。 [詳解]
 
struct  DateTimeParams
 日時情報をDateTimeに設定したりDateTimeから取得するための構造体です。 [詳解]
 
class  DestructorForLockFree
 オブジェクトをデストラクトするためのクラステンプレートです。特殊化して利用します。 [詳解]
 
class  DynamicAlignedStorage
 アラインされたメモリを得るためのクラスです。 [詳解]
 
class  ErrnoT
 errno_tをラップするクラスです。Visual Studioのデバッガ上での表示を改善します。 [詳解]
 
class  FileInputStream
 ファイルの入力ストリームです。 [詳解]
 
struct  FileInputStreamSettings
 ファイルストリームの設定情報を格納する構造体です。 [詳解]
 
class  FileOutputStream
 ファイルの出力ストリームです。 [詳解]
 
struct  FileOutputStreamSettings
 ファイルストリームの設定情報を格納する構造体です。 [詳解]
 
class  GroupVarInt32
 32bit整数値を4個単位でエンコード及びデコードするためのクラスです。 [詳解]
 
class  HandleAccess
 ハンドル実体に対してポインタのようにアクセスできるアクセサクラスです。HandlerMakerクラスにより設定されて利用可能になります。 [詳解]
 
class  HandleMaker
 32bit整数値を持つハンドルの実装を支援するクラスです。 [詳解]
 
struct  HandleTable
 HandlerMakerクラスが利用するハンドルの実体への参照テーブルです。 [詳解]
 
class  InputConverterStream
 内部でデータ変換を行う InputStream のように振る舞うクラスの基底です。 [詳解]
 
class  InputConverterStreamTempl
 InputTransformの派生クラスを保持するためのクラスです。InputConverterStreamの説明をご覧ください。 [詳解]
 
class  InputStream
 入力ストリームの基底クラスです。このクラスを実体化することはできません。 [詳解]
 
class  LockFreeBroadcastQueue
 指定された数のリスナーがキューから要素を取得できます。全てのリスナーが取得後、要素はキューから削除されます。 [詳解]
 
class  LockFreePipe
 データの送り手側のスレッドと受け手側のスレッドがそれぞれ1つずつの場合、このクラスを用いてロックフリーにデータの受け渡しを行うことができます。 [詳解]
 
class  LockFreePriorityQueue
 ロックフリーな優先度つきキューを実装したクラスで、nlib_mqをラップしています。 [詳解]
 
class  LockFreeQueue
 ロックフリーなキューを実装しているクラスです。 [詳解]
 
class  LockFreeStack
 ロックフリーなスタックを実装しているクラスです。 [詳解]
 
class  LockFreeUnitHeap
 固定メモリサイズの領域を確保・解放をロックフリーで行うことのできるプールアロケータです。 [詳解]
 
class  MemoryInputStream
 メモリを使用する入力ストリームを作成します。 [詳解]
 
class  MemoryOutputStream
 メモリを使用する出力ストリームを作成します。 [詳解]
 
struct  move_tag
 空の構造体で、関数の引数をムーブすべきことを示すために利用されます。 [詳解]
 
class  NativePathMapper
 機種依存しないURIによるパス記述からネイティブのパス文字列を得るためのクラスです。 [詳解]
 
class  Nflags
 コマンドラインフラグをパースするためのクラスです。 [詳解]
 
class  Nlist
 std::vectorに似た、コピーコンストラクタを持たないオブジェクトを格納可能なコンテナ類似クラスです。 [詳解]
 
class  Nqueue
 std::queueに似た、コピーコンストラクタを持たないオブジェクトを格納可能なコンテナ類似クラスです。 [詳解]
 
class  NullInputStream
 常に0を読み込むストリームです。 [詳解]
 
class  NullOutputStream
 実際の書き込み動作を行わないOutputStreamです。 [詳解]
 
class  OutputConverterStream
 内部でデータ変換を行うOutputStreamのように振る舞うクラスの基底です。 [詳解]
 
class  OutputConverterStreamTempl
 OutputTransformの派生クラスを保持するためのクラスです。 [詳解]
 
class  OutputStream
 出力ストリームの基底クラスです。このクラスを実体化することはできません。 [詳解]
 
class  ReallocCstringVec
 C文字列のベクタをreallocベースで実装しています。 [詳解]
 
class  ReallocOutputStream
 nlib_realloc()等のrealloc関数を利用して拡張するメモリ領域に書きこむ出力ストリームです。 [詳解]
 
class  ReallocQueue
 PODを要素に持つキューをreallocベースで実装しています。 [詳解]
 
class  ReallocVec
 PODを要素に持つベクタをreallocベースで実装しています。 [詳解]
 
class  SimpleSingleton
 main関数の実行前にstatic変数により暗黙的にインスタンスを構築するタイプのシングルトンです。 [詳解]
 
class  Singleton
 最初に利用されるときにオブジェクトが初期化されるシングルトンです。 [詳解]
 
class  SmartBitmap
 Rank/Select操作つきのビットデータを保持するデータ構造です。 [詳解]
 
class  SmartBitmapCrtp
 Rank/Select操作つきのビットデータを保持するデータ構造です。 [詳解]
 
class  SmartBitmapPtr
 Rank/Select操作つきのビットデータを保持するデータ構造です。 [詳解]
 
class  StringView
 std::stringが持つメソッドをstd::stringを構築せずに利用するためのクラスです。 C++17のstring_viewにtypedefされる予定です。 StringViewを引数に取るフリー関数についてはこちらを御覧ください。 [詳解]
 
class  TaggedTextParser
 XML風タグ付きテキストをパースする簡単なパーサーです。 [詳解]
 
class  TextReader
 ストリームからテキストを読み込むクラスです。 [詳解]
 
class  TextWriter
 ストリームにテキストを書き込むクラスです。 [詳解]
 
class  TimeSpan
 時間を表すクラスです。 [詳解]
 
class  TimeValue
 64bitの符号付き整数をラップするクラスです。 [詳解]
 
class  UniquePtr
 C++11環境(エイリアステンプレートが可能な環境)においてはstd::unique_ptrにエイリアステンプレートされます。 [詳解]
 
class  Uri
 一般的なURIをパースしたり構築したりするためのクラスです。 [詳解]
 
class  UriQueryDecoder
 URIのクエリをパースするためのクラステンプレートです。 [詳解]
 
class  UriQueryEncoder
 URIのクエリを作成するためのクラスです。 [詳解]
 
class  UriTemplate
 URI Template(RFC 6570, Level3)をサポートします。 [詳解]
 
class  Utf16InputStream
 UTF-16の文字列ストリームをUTF-8にして読み込むためのクラスです。 [詳解]
 
class  Utf32InputStream
 UTF-32の文字列ストリームをUTF-8にして読み込むためのクラスです。 [詳解]
 
class  Utf8Array
 UTF-8を格納するcharの配列をラップするクラスです。Visual Studioのデバッガ上でのUTF-8の表示を改善します。 [詳解]
 
class  Utf8Ptr
 UTF-8を格納するconst char*をラップするクラスです。Visual Studioのデバッガ上でのUTF-8の表示を改善します。 [詳解]
 
class  WcharInputStream
 ワイド文字(wchar_t, UTF-16/UTF-32)の文字列ストリームをUTF-8にして読み込むためのクラスです。 [詳解]
 
class  z
 ドキュメント作成上の都合によるダミークラスで存在しません。 [詳解]
 
class  ZlibInputStream
 zlibを用いて圧縮したデータを読み込むためのストリームクラスです。 [詳解]
 
struct  ZlibInputStreamSettings
 ZlibInputStreamの各種設定が格納されている構造体です。 コンストラクト時にはデフォルトの設定が格納されています。 [詳解]
 
class  ZlibOutputStream
 zlibを用いてデータを圧縮してストリームに書き込みます。 [詳解]
 
struct  ZlibOutputStreamSettings
 ZlibOutputStreamの各種設定が格納されている構造体です。コンストラクト時にはデフォルトの設定が格納されています。 [詳解]
 

関数

size_t StrLen (const char *str) noexcept
 nlib_strlen()をラップします。
 
size_t StrLen (const nlib_utf16_t *str) noexcept
 nlib_utf16len()をラップします。
 
size_t StrLen (const nlib_utf32_t *str) noexcept
 nlib_utf32len()をラップします。
 
size_t StrLen (const wchar_t *str) noexcept
 nlib_wcslen()をラップします。
 
errno_t CodePointCount (const char *str, size_t *count) noexcept
 nlib_strcplen()をラップします。
 
errno_t CodePointCount (const nlib_utf16_t *str, size_t *count) noexcept
 nlib_utf16cplen()をラップします。
 
errno_t CodePointCount (const nlib_utf32_t *str, size_t *count) noexcept
 nlib_utf32cplen()をラップします。
 
errno_t CodePointCount (const wchar_t *str, size_t *count) noexcept
 nlib_wcscplen()をラップします。
 
int StrCmp (const char *s1, const char *s2) noexcept
 strcmp()をラップします。
 
int StrCmp (const wchar_t *s1, const wchar_t *s2) noexcept
 wcscmp()をラップします。
 
int StrCmp (const nlib_utf16_t *s1, const nlib_utf16_t *s2) noexcept
 UTF-16文字列をstrcmp()と同様に比較します。
 
int StrCmp (const nlib_utf32_t *s1, const nlib_utf32_t *s2) noexcept
 UTF-32文字列をstrcmp()と同様に比較します。
 
int StrNcmp (const char *s1, const char *s2, size_t n) noexcept
 strncmp()をラップします。
 
int StrNcmp (const wchar_t *s1, const wchar_t *s2, size_t n) noexcept
 wcsncmp()をラップします。
 
int StrNcmp (const nlib_utf16_t *s1, const nlib_utf16_t *s2, size_t n) noexcept
 UTF-16文字列をstrncmp()と同様に比較します。
 
int StrNcmp (const nlib_utf32_t *s1, const nlib_utf32_t *s2, size_t n) noexcept
 UTF-32文字列をstrncmp()と同様に比較します。
 
errno_t StrCpy (char *dest, size_t dest_size, const char *src) noexcept
 nlib_strcpy()をラップします。
 
errno_t StrCpy (nlib_utf16_t *dest, size_t dest_size, const nlib_utf16_t *src) noexcept
 nlib_utf16cpy()をラップします。
 
errno_t StrCpy (nlib_utf32_t *dest, size_t dest_size, const nlib_utf32_t *src) noexcept
 nlib_utf32cpy()をラップします。
 
errno_t StrCpy (wchar_t *dest, size_t dest_size, const wchar_t *src) noexcept
 nlib_wcscpy()をラップします。
 
template<class T , size_t N>
errno_t StrCpy (T(&dest)[N], const T *src) noexcept
 上記関数のテンプレートオーバーロードです。 [詳解]
 
errno_t StrNcpy (char *dest, size_t dest_size, const char *src, size_t n) noexcept
 nlib_strncpy()をラップします。
 
errno_t StrNcpy (nlib_utf16_t *dest, size_t dest_size, const nlib_utf16_t *src, size_t n) noexcept
 nlib_utf16ncpy()をラップします。
 
errno_t StrNcpy (nlib_utf32_t *dest, size_t dest_size, const nlib_utf32_t *src, size_t n) noexcept
 nlib_utf32ncpy()をラップします。
 
errno_t StrNcpy (wchar_t *dest, size_t dest_size, const wchar_t *src, size_t n) noexcept
 nlib_wcsncpy()をラップします。
 
template<class T , size_t N>
errno_t StrNcpy (T(&dest)[N], const T *src, size_t n) noexcept
 上記関数のテンプレートオーバーロードです。 [詳解]
 
template<class T , size_t N>
errno_t StrCat (T(&dest)[N], const T *src) noexcept
 上記関数のテンプレートオーバーロードです。 [詳解]
 
template<class T , size_t N>
errno_t StrNcat (T(&dest)[N], const T *src, size_t n) noexcept
 上記関数のテンプレートオーバーロードです。 [詳解]
 
int VsnPrintfFallback (char *buf, size_t size, const char *fmt, va_list args) noexcept
 VsnPrintfのフォールバックです。 [詳解]
 
int VsnPrintfFallback (wchar_t *buf, size_t size, const wchar_t *fmt, va_list args) noexcept
 wchar_tの文字列を引数にとるバージョンです。
 
int VsnPrintfFallback (nlib_utf16_t *buf, size_t size, const nlib_utf16_t *fmt, va_list args) noexcept
 nlib_utf16_t(char16_t)の文字列を引数にとるバージョンです。
 
int VsnPrintfFallback (nlib_utf32_t *buf, size_t size, const nlib_utf32_t *fmt, va_list args) noexcept
 nlib_utf32_t(char32_t)の文字列を引数にとるバージョンです。
 
int VsnPrintf (char *buf, size_t size, const char *fmt, va_list args) noexcept
 vsnprintf()を実行します。 [詳解]
 
int VsnPrintf (wchar_t *buf, size_t size, const wchar_t *fmt, va_list args) noexcept
 vsnprintfを実行します。 [詳解]
 
int VsnPrintf (nlib_utf16_t *buf, size_t size, const nlib_utf16_t *fmt, va_list args) noexcept
 ワイド文字が2バイトの場合は、wchar_t用のVsnPrintf()を利用し、4バイトの場合はVsnPrintfFallback()を利用します。
 
int VsnPrintf (nlib_utf32_t *buf, size_t size, const nlib_utf32_t *fmt, va_list args) noexcept
 ワイド文字が4バイトの場合は、wchar_t用のVsnPrintf()を利用し、2バイトの場合はVsnPrintfFallback()を利用します。
 
template<size_t N, class CH >
int VsnPrintf (CH(&buf)[N], const CH *fmt, va_list args) noexcept
 上記関数のテンプレートオーバーロードです。
 
template<class CH >
int SnPrintf (CH *buf, size_t size, const CH *fmt,...) noexcept
 内部でVsnPrintf()を実行します。
 
template<size_t N, class CH >
int SnPrintf (CH(&buf)[N], const CH *fmt,...) noexcept
 上記関数のテンプレートオーバーロードです。
 
errno_t GetNintendoTime (int64_t *t) noexcept
 2000/01/01を起点とした経過時間をミリ秒単位で返します。 [詳解]
 
uint64_t GetTickTime () noexcept
 システムを起動した後の経過時間をミリ秒単位で返します。 [詳解]
 
bool operator== (const TimeValue &lhs, const TimeValue &rhs) noexcept
 等値比較を行います。
 
bool operator< (const TimeValue &lhs, const TimeValue &rhs) noexcept
 左辺が右辺より小さければtrue、それ以外ならfalseを返します。
 
TimeValue operator+ (const TimeValue &lhs, const TimeValue &rhs) noexcept
 加算します。
 
TimeValue operator- (const TimeValue &lhs, const TimeValue &rhs) noexcept
 減算します。
 
bool operator== (const TimeSpan &lhs, const TimeSpan &rhs) noexcept
 等値比較を行います。
 
bool operator< (const TimeSpan &lhs, const TimeSpan &rhs) noexcept
 左辺が右辺より小さければtrue、それ以外ならfalseを返します。
 
TimeSpan operator+ (const TimeSpan &lhs, const TimeSpan &rhs) noexcept
 加算します。
 
TimeSpan operator- (const TimeSpan &lhs, const TimeSpan &rhs) noexcept
 減算します。
 
TimeSpan operator* (int i, const TimeSpan &rhs) noexcept
 rhsi 倍します。
 
TimeSpan operator* (double d, const TimeSpan &rhs) noexcept
 rhsd 倍します。
 
TimeSpan operator* (const TimeSpan &lhs, int i) noexcept
 rhsi 倍します。
 
TimeSpan operator* (const TimeSpan &lhs, double d) noexcept
 rhsd 倍します。
 
bool operator== (const DateTime &lhs, const DateTime &rhs) noexcept
 lhsrhsが同一時刻ならばtrueを返します。
 
bool operator< (const DateTime &lhs, const DateTime &rhs) noexcept
 lhsrhsより過去の時刻ならtrueを返します。
 
DateTime operator+ (const DateTime &lhs, const TimeSpan &rhs) noexcept
 lhs から rhs だけ未来の時刻を返します。
 
DateTime operator- (const DateTime &lhs, const TimeSpan &rhs) noexcept
 lhs から rhs だけ過去の時刻を返します。
 
TimeSpan operator- (const DateTime &lhs, const DateTime &rhs) noexcept
 時刻rhs から時刻lhs までの時間を返します。
 
template<class T >
errno_t LockFreeInit (T **ptr) noexcept
 スレッドセーフにオブジェクトの構築を行います。 [詳解]
 
bool opeq (const z &lhs, const z &rhs)
 等値比較を行います。
 
bool opne (const z &lhs, const z &rhs)
 非等値比較を行います。
 
bool oplt (const z &lhs, const z &rhs)
 左辺が右辺より小さければtrue、それ以外ならfalseを返します。
 
bool opgt (const z &lhs, const z &rhs)
 右辺が左辺より小さければtrue、それ以外ならfalseを返します。
 
bool ople (const z &lhs, const z &rhs)
 左辺が右辺より小さいか等しければtrue、それ以外ならfalseを返します。
 
bool opge (const z &lhs, const z &rhs)
 右辺が左辺より小さいか等しければtrue、それ以外ならfalseを返します。
 
template<class T , class AL1 , class AL2 >
bool operator== (const Nlist< T, AL1 > &lhs, const Nlist< T, AL2 > &rhs) noexcept
 2つのリストが等価かどうか調べます。
 
template<class T , class AL1 , class AL2 >
bool operator!= (const Nlist< T, AL1 > &lhs, const Nlist< T, AL2 > &rhs) noexcept
 2つのリストが等価かどうか調べます。
 
template<class T , class AL1 , class AL2 >
bool operator< (const Nlist< T, AL1 > &lhs, const Nlist< T, AL2 > &rhs) noexcept
 2つのリストを辞書順で比較します。
 
template<class T , class AL1 , class AL2 >
bool operator> (const Nlist< T, AL1 > &lhs, const Nlist< T, AL2 > &rhs) noexcept
 2つのリストを辞書順で比較します。
 
template<class T , class AL1 , class AL2 >
bool operator<= (const Nlist< T, AL1 > &lhs, const Nlist< T, AL2 > &rhs) noexcept
 2つのリストを辞書順で比較します。
 
template<class T , class AL1 , class AL2 >
bool operator>= (const Nlist< T, AL1 > &lhs, const Nlist< T, AL2 > &rhs) noexcept
 2つのリストを辞書順で比較します。
 
bool operator== (const StringView &lhs, const StringView &rhs) noexcept
 文字列が一致するかどうか比較します。
 
bool operator< (const StringView &lhs, const StringView &rhs) noexcept
 文字列を辞書順で比較します。
 
bool StartsWith (const StringView &str, const StringView &prefix) noexcept
 prefixstrのプレフィックスである場合trueを返します。
 
bool StartsWith (const StringView &str, char c) noexcept
 cstrのプレフィックスである場合trueを返します。
 
bool StartsWith (const StringView &str, const char *prefix) noexcept
 prefixstrのプレフィックスである場合trueを返します。
 
bool EndsWith (const StringView &str, const StringView &suffix) noexcept
 suffixstrのサフィックスである場合trueを返します。
 
bool EndsWith (const StringView &str, char c) noexcept
 cstrのサフィックスである場合trueを返します。
 
bool EndsWith (const StringView &str, const char *suffix) noexcept
 suffixstrのサフィックスである場合trueを返します。
 
bool ToCstring (char *buf, size_t buf_size, const StringView &str) noexcept
 ヌル終端文字列として文字列をコピーします。コピーできた場合はtrueを返します。
 
template<size_t N>
bool ToCstring (char(&buf)[N], const StringView &str) noexcept
 上記関数のテンプレートオーバーロードです。
 
UniquePtr< char[]> ToCstring (const StringView &str) noexcept
 メモリを割り当ててヌル終端文字列として文字列をコピーします。コピーできた場合はtrueを返します。
 
std::pair< errno_t, size_t > ToInteger (int8_t *v, const StringView &str, int base) noexcept
 内部でnlib_int8_from_chars()を呼び出して、文字列を数値に変換します。戻り値はエラー値と読み込んだ文字数のペアです。
 
std::pair< errno_t, size_t > ToInteger (int16_t *v, const StringView &str, int base) noexcept
 内部でnlib_int16_from_chars()を呼び出して、文字列を数値に変換します。戻り値はエラー値と読み込んだ文字数のペアです。
 
std::pair< errno_t, size_t > ToInteger (int32_t *v, const StringView &str, int base) noexcept
 内部でnlib_int32_from_chars()を呼び出して、文字列を数値に変換します。戻り値はエラー値と読み込んだ文字数のペアです。
 
std::pair< errno_t, size_t > ToInteger (int64_t *v, const StringView &str, int base) noexcept
 内部でnlib_int64_from_chars()を呼び出して、文字列を数値に変換します。戻り値はエラー値と読み込んだ文字数のペアです。
 
std::pair< errno_t, size_t > ToInteger (uint8_t *v, const StringView &str, int base) noexcept
 内部でnlib_uint8_from_chars()を呼び出して、文字列を数値に変換します。戻り値はエラー値と読み込んだ文字数のペアです。
 
std::pair< errno_t, size_t > ToInteger (uint16_t *v, const StringView &str, int base) noexcept
 内部でnlib_uint16_from_chars()を呼び出して、文字列を数値に変換します。戻り値はエラー値と読み込んだ文字数のペアです。
 
std::pair< errno_t, size_t > ToInteger (uint32_t *v, const StringView &str, int base) noexcept
 内部でnlib_uint32_from_chars()を呼び出して、文字列を数値に変換します。戻り値はエラー値と読み込んだ文字数のペアです。
 
std::pair< errno_t, size_t > ToInteger (uint64_t *v, const StringView &str, int base) noexcept
 内部でnlib_uint64_from_chars()を呼び出して、文字列を数値に変換します。戻り値はエラー値と読み込んだ文字数のペアです。
 
std::pair< errno_t, size_t > ToFloat (float *v, const StringView &str) noexcept
 内部でnlib_float_from_chars()を呼び出して、文字列を数値に変換します。戻り値はエラー値と読み込んだ文字数のペアです。
 
std::pair< errno_t, size_t > ToDouble (double *v, const StringView &str) noexcept
 内部でnlib_double_from_chars()を呼び出して、文字列を数値に変換します。戻り値はエラー値と読み込んだ文字数のペアです。
 
template<class T >
std::pair< errno_t, size_t > ToInteger (T *v, const StringView &str) noexcept
 ToInteger(v, str, 10)を返します。つまり10進数として文字列を数値に変換します。
 
bool TrimLeft (StringView &str) noexcept
 文字列の先頭の空白を切り詰めます。 [詳解]
 
bool TrimRight (StringView &str) noexcept
 文字列の末尾の空白を切り詰めます。 [詳解]
 
void Trim (StringView &str) noexcept
 文字列の先頭と末尾の空白を切り詰めます。
 
StringView GetLine (StringView &str) noexcept
 先頭から行末までの文字列を取得します。自身のオブジェクト(str)は次の行の行頭に移動します。 [詳解]
 
bool Proceed (StringView &str, const StringView &prefix) noexcept
 strprefixで始まっていればその文字列長だけ進めます。 [詳解]
 
bool Proceed (StringView &str, const char *prefix) noexcept
 strprefixで始まっていればその文字列長だけ進めます。 [詳解]
 
bool Proceed (StringView &str, char c) noexcept
 strcで始まっていればその文字列長だけ進めます。 [詳解]
 
StringView GetName (StringView &str) noexcept
 一般に変数名とされるような文字列を取得します。自身のオブジェクト(str)は取得した文字列の次に移動します。 [詳解]
 

詳解

共通して使われることの多いストリーム関連のクラス群や各種コンテナ、及びガシェットクラスが実装されています。nlib_nsはエイリアスです。

説明
nn::nlib名前空間には以下のようなクラスや関数が実装されています。
  • InputStream, OutputStreamを基底クラスとする、各種ストリームクラス
  • テキストデータの読み書き
    • TextReader, TextWriterによるUTF-8文字列のストリームへの文字コードの検証を伴う読み書き
    • Nflagsによるコマンドライン文字列の解析
    • StringViewによる、C文字列をstd::stringのように扱うためのインターフェイスの提供
    • StrTo()関数による、std::strtol系関数の安全なラップ
    • NativePathMapperによる、機種依存しないURIベースのファイルパス表現文字列のサポート
    • TaggedTextParserによるXML風タグ付きテキストの簡易パーサー
  • バイナリデータの読み書き
    • BinaryReader, BinaryWriterによるバイナリのストリームへのエンディアンを考慮した読み書き
    • GroupVarInt32によるGroup Varintでエンコードされたデータの読み書き
  • 日時の取り扱い
  • URIの読み書き
    • Uri, HttpStyleUri, FileStyleUriによる各種URIの読み書き
    • UriTemplateによるテンプレートからのURI文字列生成のサポート
  • コンテナ
    • Nlist。要素数が増大した場合においても要素の格納場所が変更されないstd::vector類似のコンテナ
  • ロックフリーデータ構造のサポート
    • LockFreePipeによるロックフリーな1:1のスレッド間通信のサポート
    • LockFreeStackによるロックフリーなスタックのサポート
    • LockFreeQueueによるロックフリーなキューのサポート
    • LockFreeInit()によるロックフリーなオブジェクトの構築と初期化のサポート
    • LockFreePriorityQueueによるロックフリーな優先度つきキューのサポート
    • LockFreeBroadcastQueueによるロックフリーなブロードキャスト可能なキューのサポート
  • その他
    • HandleMakerによる32bit整数ハンドルの作成支援
    • UniquePtrによるC++03環境におけるstd::unique_ptrの機能のサポート
参照
nlib Platform APIs (グローバル名前空間)

関数詳解

◆ GetNintendoTime()

nn::nlib::GetNintendoTime ( int64_t *  t)
inlinenoexcept

2000/01/01を起点とした経過時間をミリ秒単位で返します。

引数
[out]t経過時間が格納されるポインタ
戻り値
0以外の場合はエラー。ポインタが無効な場合はEINVALを返します。

DateTime.h31 行目に定義があります。

◆ GetTickTime()

nn::nlib::GetTickTime ( )
inlinenoexcept

システムを起動した後の経過時間をミリ秒単位で返します。

戻り値
システムを起動した後の経過時間
各種例:
heap/cachedheap/cachedheap.cpp, heap/nmalloc_simple/nmalloc_simple.cpp, msgpack/msgpack2/msgpack2.cpp.

DateTime.h42 行目に定義があります。

◆ LockFreeInit()

template<class T >
nn::nlib::LockFreeInit ( T **  ptr)
inlinenoexcept

スレッドセーフにオブジェクトの構築を行います。

テンプレート引数
T初期化するオブジェクトの型
引数
[out]ptr初期化されたオブジェクトへのポインタ
戻り値
0成功した場合
EAGAINコンストラクタ関数(ConstructorForLockFree<T>()())がNULLを返した場合
説明
ConstructorForLockFree<T>()()を実行して作成されたオブジェクトへのポインタを*ptrに代入します。 この際にmutexによる排他が行われることはなく、CAS(Compare-and-Swap)によりスレッドセーフに1回だけオブジェクトへのポインタが設定されます。 このため、複数のスレッドで同時にConstructorForLockFree<T>()()が実行される場合があり、利用されないオブジェクトはDestructorForLockFree<T>()()を実行して削除されます。 なお、*ptrは静的にNULLに初期化しておく必要があります。
以下がコード例です。サンプルコードではMyObjectの構築に時間がかかるため、複数のスレッドがMyObjectの構築を行いますが、利用されるオブジェクトはどれか1つだけで残りは利用されずに削除されます。 このような状況では実行効率が低下するので、オブジェクトの構築に時間がかからない場合の利用に向いています。
struct MyObject {
MyObject() {
nlib_printf("MyObject(%p) is constructed by thread %d\n",
this, GetMyThreadId());
nlib_sleep(10000);
}
~MyObject() {
nlib_printf("MyObject(%p) is destroyed by thread %d\n",
this, GetMyThreadId());
}
void UseObject() {
nlib_printf("Object(%p) used from thread %d\n",
this, GetMyThreadId());
}
};
static MyObject* myobj = NULL;
const int kNumThread = 8;
std::thread th_list[kNumThread];
for (auto& th : th_list) {
th = std::thread([&]() {
if (e == 0) { myobj->UseObject(); }
});
}
for (auto& th : th_list) { th.join(); }
MyObject* p = myobj;
myobj = nullptr; // use nlib_atomic_compare_exchangeptr if used in other places.
delete p;
/*
Output:
MyObject(0000017EF4EF16F0) is constructed by thread 16972
MyObject(0000017EF4EF1670) is constructed by thread 5744
MyObject(0000017EF4EF1430) is constructed by thread 9036
MyObject(0000017EF4EF0FF0) is constructed by thread 232
MyObject(0000017EF4EF1470) is constructed by thread 12732
MyObject(0000017EF4EF14B0) is constructed by thread 15228
MyObject(0000017EF4F2DB80) is constructed by thread 5792
MyObject(0000017EF4F2D640) is constructed by thread 7100
Object(0000017EF4EF1670) used from thread 5744
MyObject(0000017EF4EF1430) is destroyed by thread 9036
MyObject(0000017EF4F2DB80) is destroyed by thread 5792
MyObject(0000017EF4EF0FF0) is destroyed by thread 232
MyObject(0000017EF4EF14B0) is destroyed by thread 15228
Object(0000017EF4EF1670) used from thread 232
MyObject(0000017EF4EF1470) is destroyed by thread 12732
Object(0000017EF4EF1670) used from thread 9036
Object(0000017EF4EF1670) used from thread 15228
Object(0000017EF4EF1670) used from thread 12732
Object(0000017EF4EF1670) used from thread 5792
MyObject(0000017EF4F2D640) is destroyed by thread 7100
MyObject(0000017EF4EF16F0) is destroyed by thread 16972
Object(0000017EF4EF1670) used from thread 7100
Object(0000017EF4EF1670) used from thread 16972
MyObject(0000017EF4EF1670) is destroyed by thread 15912
*/

LockFree.h602 行目に定義があります。

◆ StrCat()

template<class T , size_t N>
nn::nlib::StrCat ( T(&)  dest[N],
const T *  src 
)
inlinenoexcept

上記関数のテンプレートオーバーロードです。

テンプレート引数
Tchar, wchar_tのどれか
N追加先の文字列バッファのサイズ
引数
[in,out]destヌル文字で終わる追加先の文字列バッファ
[in]srcヌル文字で終わる追加先の文字列
戻り値
StrCat(&dest[0], N, src)の戻り値

Cstring.h148 行目に定義があります。

◆ StrCpy()

template<class T , size_t N>
nn::nlib::StrCpy ( T(&)  dest[N],
const T *  src 
)
inlinenoexcept

上記関数のテンプレートオーバーロードです。

テンプレート引数
Tchar,wchar_t,nlib_utf16_t,nlib_utf32_t のいずれか
Nコピー先のバッファ・サイズ
引数
[out]dest文字列のコピー先バッファ
[in]srcコピーされる文字列
戻り値
StrCpy(&dest[0], N, src)の戻り値

Cstring.h122 行目に定義があります。

◆ StrNcat()

template<class T , size_t N>
nn::nlib::StrNcat ( T(&)  dest[N],
const T *  src,
size_t  n 
)
inlinenoexcept

上記関数のテンプレートオーバーロードです。

テンプレート引数
Tchar, wchar_tのどれか
N追加先の文字列バッファのサイズ
引数
[in,out]destヌル文字で終わる追加先の文字列バッファ
[in]srcヌル文字で終わる追加先の文字列
[in]n追加する最大文字数(ヌル文字を除く)
戻り値
StrNcat(&dest[0], N, src, n)の戻り値

Cstring.h153 行目に定義があります。

◆ StrNcpy()

template<class T , size_t N>
nn::nlib::StrNcpy ( T(&)  dest[N],
const T *  src,
size_t  n 
)
inlinenoexcept

上記関数のテンプレートオーバーロードです。

テンプレート引数
Tchar,wchar_t,nlib_utf16_t,nlib_utf32_t のいずれか
Nコピー先のバッファ・サイズ
引数
[out]dest文字列のコピー先バッファ
[in]srcコピーされる文字列
[in]nコピーする最大文字数(ヌル文字を除く)
戻り値
StrNcpy(&dest[0], N, src, n)の戻り値

Cstring.h143 行目に定義があります。

◆ VsnPrintf() [1/2]

nn::nlib::VsnPrintf ( char *  buf,
size_t  size,
const char *  fmt,
va_list  args 
)
inlinenoexcept

vsnprintf()を実行します。

引数
[out]buf文字列の格納バッファ
[in]sizeバッファ・サイズ(文字数)
[in]fmt書式の指定
[in]args引数リストへのポインタ
戻り値
成功した場合は、終端ヌル文字を含めない書き込まれた(はずだった)文字列長。失敗した場合は、負の値。
説明
buf の最後にはヌル文字が書き込まれます。 呼び出し後にユーザーがva_endを呼び出す必要があります。
内部でvsnprintfを実行しますが、エラー値等の動作の細部はプラットフォームにより異なることがあります。
以下にコーディング例を示します。
void MyFunc(char* buf, size_t size, const char* fmt, ...) {
va_start(args, fmt);
int n = VsnPrintf(buf, size, fmt, args);
va_end(args);
if (n < 0) {
// バッファ・サイズが足りない場合、正の数を返さずに負の値を返し、errnoにEAGAIN, ERANGE, EOVERFLOW等のエラーが設定される場合があることに注意してください。
// プラットフォームによりエラー値は異なります。
// また、負数となる値自体も異なりますので不等号で比較してください。
....
} else if (static_cast<size_t>(n) >= size) {
// 文字列は完全には書き込まれず、途中で丸められている。
....
} else {
// 正常に書き込まれた
....
}
}

Cstring.h277 行目に定義があります。

◆ VsnPrintf() [2/2]

nn::nlib::VsnPrintf ( wchar_t *  buf,
size_t  size,
const wchar_t *  fmt,
va_list  args 
)
inlinenoexcept

vsnprintfを実行します。

引数
[out]buf文字列の格納バッファ
[in]sizeバッファ・サイズ(文字数)
[in]fmt書式の指定
[in]args引数リストへのポインタ
戻り値
成功した場合は、終端ヌル文字を含めない書き込んだ文字数。失敗した場合は、負の値。
説明
buf の最後にはヌル文字が書き込まれます。 呼び出し後にユーザーがva_endを呼び出す必要があります。
内部でvsnwprintfを実行しますが、エラー値等の動作の細部はプラットフォームにより異なることがあります。

Cstring.h285 行目に定義があります。

◆ VsnPrintfFallback()

nn::nlib::VsnPrintfFallback ( char *  buf,
size_t  size,
const char *  fmt,
va_list  args 
)
noexcept

VsnPrintfのフォールバックです。

引数
[out]buf文字列の格納バッファ
[in]sizeバッファ・サイズ(文字数)
[in]fmt書式の指定
[in]args引数リストへのポインタ
戻り値
成功した場合は、終端ヌル文字を含めない書き込んだ文字数。失敗した場合は、負の値。
説明
vsnprintfが存在しない環境か、それに類する環境においてVsnPrintfから呼び出されます。 この関数を直接呼び出すことも可能です。 現在のところ浮動小数点型については指数表現は行われません。
失敗した場合は、errnoにエラー値が設定されます(errnoが存在する環境の場合)。
フラグ文字については以下のものがサポートされています。
  • #, xとX変換の場合、数値が0でないときに文字列0x(又は0X)が前に追加されます。また、o変換の場合、数値が0でないときに文字0が前に追加されます。
  • 0, 変換された値の左側を空白ではなく0で埋めます。'-'が指定されている場合には無視されます。精度が指定されている場合には無視されます。
  • -, 左詰めにします。
  • ' ', 符号付き変換で生成された正の数字の前にスペースが1つ追加されます。
  • +, 符号付き変換された数値の前に、常に符号が置かれます。
フィールド幅については、10進数の文字列か、"*"を指定できます。"*"は次の引数をフィールド幅として指定するもので、int型の値である必要があります。
精度については、10進数の文字列か、"*"を指定できます。
長さ修飾子については、以下のものがサポートされています。
  • hh, 引数がchar又はunsigned charである場合
  • h, 引数がshort又はunsigned shortである場合
  • l, 引数がlong又はunsigned longである場合
  • ll, 引数がlong long又はunsigned long longである場合
  • z, 引数がsize_tである場合
変換指定子については、以下のものがサポートされています。
  • d, i, 符号付き整数
  • o, u, x, X, 符号なし整数
  • c, 文字(char型)
  • s, 文字列(const char*型), %lsの場合はconst wchar_t*型の文字列であるとされますが、下位8bitに対応する文字が出力されます。
  • p, ポインタアドレスを16進数で出力します。