5c259d7ed19651215e932103fc6debdfe1b792de
[platform/core/ml/nnfw.git] / runtime / libs / benchmark / include / benchmark / CsvWriter.h
1 /*
2  * Copyright (c) 2019 Samsung Electronics Co., Ltd. All Rights Reserved
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 #ifndef __NNFW_BENCHMARK_CSV_WRITER_H__
18 #define __NNFW_BENCHMARK_CSV_WRITER_H__
19
20 #include <vector>
21 #include <string>
22 #include <fstream>
23
24 namespace benchmark
25 {
26
27 class CsvWriter
28 {
29 public:
30   CsvWriter(const std::string &csv_filename);
31   CsvWriter(const std::string &csv_filename, const std::vector<std::string> &header);
32   virtual ~CsvWriter();
33
34   void write(const std::string &val);
35   void write(double val);
36   void write(uint32_t val);
37   void write(char val);
38   bool done();
39
40 public:
41   static const char delimiter = ',';
42   static const char newline = '\n';
43
44   friend CsvWriter &operator<<(CsvWriter &csvw, const std::string &val);
45   friend CsvWriter &operator<<(CsvWriter &csvw, double val);
46   friend CsvWriter &operator<<(CsvWriter &csvw, uint32_t val);
47   friend CsvWriter &operator<<(CsvWriter &csvw, char val);
48
49 private:
50   void writeHeader(const std::vector<std::string> &header);
51   inline void postWrite();
52
53 private:
54   std::ofstream _ofs;
55   uint32_t _header_size;
56   uint32_t _col_idx;
57   uint32_t _row_idx;
58 };
59
60 } // namespace benchmark
61
62 #endif // __NNFW_BENCHMARK_CSV_WRITER_H__