etrobocon2018 feat.KatLab  770af34cce41ae9c30c41303275e1add2daae0c3 (with uncommitted changes)
 全て クラス 名前空間 ファイル 関数 変数 列挙型 列挙値 フレンド マクロ定義 ページ
公開メンバ関数 | 全メンバ一覧
InitialPositionCodeDecoder クラス

#include <InitialPositionCodeDecoder.h>

InitialPositionCodeDecoder 連携図
Collaboration graph

公開メンバ関数

void decode (std::int32_t code)
 
std::int32_t getInitialPositionCode ()
 
std::vector< std::int8_t > getInitialPositionCodeList ()
 
std::int8_t getInitialPositionPowerBlockCode ()
 

詳解

5桁から6桁の初期位置コードを初期の位置コードリストにデコードするクラス

Example

std::int32_t initialPositionCode = 74840; // = 1*16^4 + 2*16^3 + 4*16^2 + 5*16^1 + 8
ipcd.decode(initialPositionCode);
std::vector<std::int8_t> decodedColorBlockCodeList = ipcd.getInitialPositionCodeList(); // = {1, 2, 4, 5}
std::int8_t decodedPowerBlockCode = ipcd.getInitialPositionPowerBlockCode(); // = 8

InitialPositionCodeDecoder.h29 行目に定義があります。

関数詳解

void InitialPositionCodeDecoder::decode ( std::int32_t  code)

初期位置コードをデコードする

引数
code初期位置コード
0未満はこのクラスで定義している初期値を返す

InitialPositionCodeDecoder.cpp9 行目に定義があります。

9  {
10  if (code < 0) return;
11 
12  std::int8_t remainder = 0;
13  initialPositionCode = code;
14  std::int32_t sumCurrentCode = 0;
15  std::int32_t codeBeforeDecoded = 0;
16 
17  std::vector<std::int32_t> power16 = {1, 16, 16*16, 16*16*16, 16*16*16*16};
18 
19  remainder = code % power16[4] % power16[3] % power16[2] % power16[1];
20  initialPositionPowerBlockCode = remainder;
21  sumCurrentCode = remainder;
22 
23  codeBeforeDecoded = (code - sumCurrentCode) % power16[4] % power16[3] % power16[2];
24  initialPositionCodeList[3] = codeBeforeDecoded / power16[1];
25  sumCurrentCode += codeBeforeDecoded;
26 
27  codeBeforeDecoded = (code - sumCurrentCode) % power16[4] % power16[3];
28  initialPositionCodeList[2] = codeBeforeDecoded / power16[2];
29  sumCurrentCode += codeBeforeDecoded;
30 
31  codeBeforeDecoded = (code - sumCurrentCode) % power16[4];
32  initialPositionCodeList[1] = codeBeforeDecoded / power16[3];
33  sumCurrentCode += codeBeforeDecoded;
34 
35  codeBeforeDecoded = (code - sumCurrentCode);
36  initialPositionCodeList[0] = codeBeforeDecoded / power16[4];
37 }

被呼び出し関係図:

std::int32_t InitialPositionCodeDecoder::getInitialPositionCode ( )

初期位置コードを取得する

戻り値
初期位置コード

InitialPositionCodeDecoder.cpp39 行目に定義があります。

39  {
40  return initialPositionCode;
41 }

被呼び出し関係図:

std::vector< std::int8_t > InitialPositionCodeDecoder::getInitialPositionCodeList ( )

初期の位置コードリストを取得する

戻り値
初期の位置コードリスト

InitialPositionCodeDecoder.cpp43 行目に定義があります。

43  {
44  return initialPositionCodeList;
45 }

被呼び出し関係図:

std::int8_t InitialPositionCodeDecoder::getInitialPositionPowerBlockCode ( )

パワーブロックの初期の位置コードを取得する

パワーブロックの初期位置は、1~8のみを取る。 計算外の場合は0を返す。 計算上、1~15までの値を取る可能性はあるが、9以上の場合は動作未検証である。

戻り値
パワーブロックの初期の位置コード
1~8のみ、 decode(std::int32_t) の実行前は0を返す

InitialPositionCodeDecoder.cpp47 行目に定義があります。

47  {
48  return initialPositionPowerBlockCode;
49 }

被呼び出し関係図:


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