nlib
nn::nlib::GroupVarInt32 クラス

32bit整数値を4個単位でエンコード及びデコードするためのクラスです。 [詳解]

#include "nn/nlib/GroupVarInt.h"

静的公開メンバ関数

static size_t GetEncodedSize (uint32_t v0, uint32_t v1, uint32_t v2, uint32_t v3) noexcept
 4つの整数値がエンコードされた場合のサイズを返します。 [詳解]
 
static size_t GetEncodedSize (const uint32_t *p) noexcept
 4つの整数値がエンコードされた場合のサイズを返します。 [詳解]
 
static size_t GetNextGroupSize (const uint8_t *p) noexcept
 次の4つの整数値へのデコードに何バイトが使われるかを返します。 [詳解]
 
static uint8_t * Encode (uint8_t *p, uint32_t v0, uint32_t v1, uint32_t v2, uint32_t v3) noexcept
 4つの32bit整数値をエンコードします。 [詳解]
 
static uint8_t * Encode (uint8_t *p, const uint32_t *src) noexcept
 4つの32bit整数値をエンコードします。 [詳解]
 
static const uint8_t * Decode (uint32_t *v0, uint32_t *v1, uint32_t *v2, uint32_t *v3, const uint8_t *p) noexcept
 4つの32bit整数値をデコードします。 [詳解]
 
static const uint8_t * Decode (uint32_t *dest, const uint8_t *p) noexcept
 4つの32bit整数値をデコードします。 [詳解]
 
static size_t GetMaxSize (size_t n) noexcept
 n個の整数値をエンコードした場合の最大サイズを返します。
 
static size_t GetTotalSize (const uint32_t *p, size_t n) noexcept
 エンコードした結果を格納するのに必要なバイト数を返します。 [詳解]
 

詳解

32bit整数値を4個単位でエンコード及びデコードするためのクラスです。

説明
4つの32bit整数値を5-17バイトにエンコードします。 それぞれの整数値の長さを示す情報を最初のバイトに記述することによって、デコードの際のシフトやマスク、及び条件分岐を減らし良好なパフォーマンスを得ることができます。
参照
https://static.googleusercontent.com/media/research.google.com/ja//people/jeff/WSDM09-keynote.pdf
https://web.stanford.edu/class/cs276/Jeff-Dean-compression-slides.pdf
http://www.stepanovpapers.com/CIKM_2011.pdf

GroupVarInt.h13 行目に定義があります。

関数詳解

§ Decode() [1/2]

nn::nlib::GroupVarInt32::Decode ( uint32_t *  v0,
uint32_t *  v1,
uint32_t *  v2,
uint32_t *  v3,
const uint8_t *  p 
)
inlinestaticnoexcept

4つの32bit整数値をデコードします。

引数
[out]v0デコードされた32bit整数値を格納するためのポインタ
[out]v1デコードされた32bit整数値を格納するためのポインタ
[out]v2デコードされた32bit整数値を格納するためのポインタ
[out]v3デコードされた32bit整数値を格納するためのポインタ
[in]pエンコードされたデータへのポインタ
戻り値
デコードに使用したデータの直後へのポインタ

GroupVarInt.h204 行目に定義があります。

§ Decode() [2/2]

nn::nlib::GroupVarInt32::Decode ( uint32_t *  dest,
const uint8_t *  p 
)
inlinestaticnoexcept

4つの32bit整数値をデコードします。

引数
[out]dest4つの32bit整数値を格納するためのポインタ
[in]pエンコードされたデータへのポインタ
戻り値
デコードに使用したデータの直後へのポインタ

GroupVarInt.h195 行目に定義があります。

§ Encode() [1/2]

nn::nlib::GroupVarInt32::Encode ( uint8_t *  p,
uint32_t  v0,
uint32_t  v1,
uint32_t  v2,
uint32_t  v3 
)
inlinestaticnoexcept

4つの32bit整数値をエンコードします。

引数
[out]pエンコードされたデータが書き込まれる場所へのポインタ
[in]v032bit整数値
[in]v132bit整数値
[in]v232bit整数値
[in]v332bit整数値
戻り値
書き込まれたデータの直後の場所へのポインタ

GroupVarInt.h84 行目に定義があります。

§ Encode() [2/2]

nn::nlib::GroupVarInt32::Encode ( uint8_t *  p,
const uint32_t *  src 
)
inlinestaticnoexcept

4つの32bit整数値をエンコードします。

引数
[out]pエンコードされたデータが書き込まれる場所へのポインタ
[in]src4つの32bit整数値へのポインタ
戻り値
書き込まれたデータの直後の場所へのポインタ

GroupVarInt.h71 行目に定義があります。

§ GetEncodedSize() [1/2]

nn::nlib::GroupVarInt32::GetEncodedSize ( uint32_t  v0,
uint32_t  v1,
uint32_t  v2,
uint32_t  v3 
)
inlinestaticnoexcept

4つの整数値がエンコードされた場合のサイズを返します。

引数
[in]v032bit整数値
[in]v132bit整数値
[in]v232bit整数値
[in]v332bit整数値
戻り値
エンコードされた場合のサイズ

GroupVarInt.h15 行目に定義があります。

§ GetEncodedSize() [2/2]

nn::nlib::GroupVarInt32::GetEncodedSize ( const uint32_t *  p)
inlinestaticnoexcept

4つの整数値がエンコードされた場合のサイズを返します。

引数
[in]p32bit整数値へのポインタ(p[0],p[1],p[2],p[3]が利用される)
戻り値
エンコードされた場合のサイズ

GroupVarInt.h46 行目に定義があります。

§ GetNextGroupSize()

nn::nlib::GroupVarInt32::GetNextGroupSize ( const uint8_t *  p)
inlinestaticnoexcept

次の4つの整数値へのデコードに何バイトが使われるかを返します。

引数
[in]pエンコードされたバイト列へのポインタ
戻り値
デコードに利用されるバイト数

GroupVarInt.h50 行目に定義があります。

§ GetTotalSize()

nn::nlib::GroupVarInt32::GetTotalSize ( const uint32_t *  p,
size_t  n 
)
inlinestaticnoexcept

エンコードした結果を格納するのに必要なバイト数を返します。

引数
[in]p32bit整数値の並びへのポインタ
[in]n32bit整数値の個数
戻り値
エンコード後のバイト数

GroupVarInt.h59 行目に定義があります。


このクラス詳解は次のファイルから抽出されました: