ARCS6 AR6-REV.24062600
読み取り中…
検索中…
一致する文字列を見つけられません
ARCSmemory.hh
[詳解]
1
8//
9// Copyright (C) 2011-2024 Yokokura, Yuki
10// MIT License. For details, see the LICENSE file.
11
12#ifndef ARCSMEMORY
13#define ARCSMEMORY
14
15#include <array>
16#include <memory>
17#include <cmath>
18#include "ConstParams.hh"
19
20namespace ARCS { // ARCS名前空間
22 class ARCSmemory {
23 public:
24 ARCSmemory();
25 ~ARCSmemory();
26 void Reset(void);
27 void WriteCsvFile(void);
28
31 template<typename T1, typename... T2>
32 void SetData(const T1& u1, const T2&... u2){
33 // 再帰で順番に可変長引数を読み込んでいく
34 if(Nindex == 0){
35 // 1個目の引数は周期として一時的に格納
36 Tperiod = (double)u1;
37 }else if(Nindex == 1){
38 // 2個目の引数は時刻として一時的に格納
39 Time = (double)u1;
40 if(
43 ){
44 // 保存時間の範囲外,もしくは保存時刻でなかったら
45 Nindex = 0; // 再帰カウンタを零に戻しておいてから
46 return; // 可変長引数の読み込みを打ち切る
47 }
48 }else{
49 // 3個目以降は変数値として処理
50 if(0 <= Tindex && Tindex < ELEMENT_NUM){
51 // 念のための要素番号リミッタ
52 SaveBuffer->at(Tindex).at(Nindex - 1) = (double)u1; // 2列目以降に変数値を保存
53 }
54 }
55 ++Nindex; // 再帰カウンタをインクリメント
56 SetData(u2...); // 自分自身を呼び出す(再帰)
57 }
59 void SetData(){
60 if(0 <= Tindex && Tindex < ELEMENT_NUM){
61 // 念のための要素番号リミッタ
62 SaveBuffer->at(Tindex).at(0) = Time;// 1列目に時刻を保存
63 }
64 ++Tindex; // 時間用カウンタを進める
65 Nindex = 0; // 可変長引数の読み込み作業が終わったので,再帰カウンタを零に戻しておく
66 }
67
68 private:
69 ARCSmemory(ARCSmemory&& r) = delete;
70 ARCSmemory(const ARCSmemory&) = delete;
71 const ARCSmemory& operator=(const ARCSmemory&) = delete;
72
74 static constexpr size_t ELEMENT_NUM = (ConstParams::DATA_END - ConstParams::DATA_START)/ConstParams::DATA_RESO + 1;
75
78 std::unique_ptr<std::array<
79 std::array<double, ConstParams::DATA_NUM>,
80 ELEMENT_NUM
81 >> SaveBuffer;
82 size_t Tindex;
83 size_t Nindex;
84 double Tperiod;
85 double Time;
86 };
87}
88
89#endif
90
定数値格納用クラス ARCSに必要な定数値を格納します。
データメモリクラス
Definition ARCSmemory.hh:22
void Reset(void)
リセットする関数
Definition ARCSmemory.cc:59
void SetData(const T1 &u1, const T2 &... u2)
データを格納する関数(可変長引数テンプレート)
Definition ARCSmemory.hh:32
void WriteCsvFile(void)
CSVファイルを書き出す関数
Definition ARCSmemory.cc:64
~ARCSmemory()
デストラクタ
Definition ARCSmemory.cc:54
void SetData()
再帰の最後に呼ばれる関数
Definition ARCSmemory.hh:59
ARCSmemory()
コンストラクタ
Definition ARCSmemory.cc:32
static constexpr double DATA_END
[s] 保存終了時刻
Definition ConstParams.hh:29
static constexpr double DATA_RESO
[s] データの時間分解能
Definition ConstParams.hh:30
static constexpr double DATA_START
[s] 保存開始時刻
Definition ConstParams.hh:28