CppBlock.h
Go to the documentation of this file.
1/*
2 * This file is part of ArmarX.
3 *
4 * Copyright (C) 2011-2016, High Performance Humanoid Technologies (H2T), Karlsruhe Institute of Technology (KIT), all rights reserved.
5 *
6 * ArmarX is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
9 *
10 * ArmarX is distributed in the hope that it will be useful, but
11 * WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
17 *
18 * @package
19 * @author
20 * @date
21 * @copyright http://www.gnu.org/licenses/gpl-2.0.txt
22 * GNU General Public License
23 */
24#pragma once
25
26#include <memory>
27#include <string>
28#include <vector>
29
30#include <boost/format/format_fwd.hpp>
31
32#include "CppWriter.h"
33
34namespace armarx
35{
36 class CppBlock;
37 using CppBlockPtr = std::shared_ptr<CppBlock>;
38
39 class CppBlockEntry;
40 using CppBlockEntryPtr = std::shared_ptr<CppBlockEntry>;
41
43 {
44 public:
45 CppBlockEntry() = default;
46 virtual void writeCpp(const CppWriterPtr& writer) = 0;
47 virtual std::string getAsSingleLine() = 0;
48 };
49
50 class CppBlockStringEntry : virtual public CppBlockEntry
51 {
52 public:
53 CppBlockStringEntry(const std::string&);
54 virtual void writeCpp(const CppWriterPtr& writer) override;
55 virtual std::string getAsSingleLine() override;
56
57 private:
58 std::string line;
59 };
60
61 class CppBlockBlockEntry : virtual public CppBlockEntry
62 {
63 public:
65 virtual void writeCpp(const CppWriterPtr& writer) override;
66 virtual std::string getAsSingleLine() override;
67
68 private:
69 CppBlockPtr nestedBlock;
70 };
71
73 {
74 public:
75 CppBlock();
76
77 void writeCpp(const CppWriterPtr& writer);
78 std::string getAsSingleLine();
79 void addLine(const std::string& line);
80 void addLine(const boost::basic_format<char>& line);
81
82 size_t size() const;
83
84 void addCommentLine(const std::string& line);
85 void addCommentLine(const boost::basic_format<char>& line);
86
87 void addCommentLines(const std::vector<std::string>& lines);
88 void addCommentLines(const std::vector<boost::basic_format<char>>& lines);
89
90 void addBlock(const CppBlockPtr& block);
91 void appendBlock(const CppBlockPtr& block);
92
93 void addLineAsBlock(const std::string& line);
94
95 static CppBlockPtr MergeBlocks(const CppBlockPtr& block1, const CppBlockPtr& block2);
96
97 protected:
98 void addEntry(const CppBlockEntryPtr& entry);
99 std::vector<CppBlockEntryPtr> entries;
100 };
101} // namespace armarx
virtual std::string getAsSingleLine() override
Definition CppBlock.cpp:72
virtual void writeCpp(const CppWriterPtr &writer) override
Definition CppBlock.cpp:49
CppBlockBlockEntry(const CppBlockPtr &)
Definition CppBlock.cpp:38
virtual std::string getAsSingleLine()=0
virtual void writeCpp(const CppWriterPtr &writer)=0
CppBlockStringEntry(const std::string &)
Definition CppBlock.cpp:34
virtual std::string getAsSingleLine() override
Definition CppBlock.cpp:66
virtual void writeCpp(const CppWriterPtr &writer) override
Definition CppBlock.cpp:43
void addLineAsBlock(const std::string &line)
Definition CppBlock.cpp:162
size_t size() const
Definition CppBlock.cpp:106
void addEntry(const CppBlockEntryPtr &entry)
Definition CppBlock.cpp:170
void addCommentLine(const std::string &line)
Definition CppBlock.cpp:112
void writeCpp(const CppWriterPtr &writer)
Definition CppBlock.cpp:55
void addLine(const std::string &line)
Definition CppBlock.cpp:93
void appendBlock(const CppBlockPtr &block)
Definition CppBlock.cpp:153
std::string getAsSingleLine()
Definition CppBlock.cpp:78
std::vector< CppBlockEntryPtr > entries
Definition CppBlock.h:99
void addBlock(const CppBlockPtr &block)
Definition CppBlock.cpp:146
void addCommentLines(const std::vector< std::string > &lines)
Definition CppBlock.cpp:124
static CppBlockPtr MergeBlocks(const CppBlockPtr &block1, const CppBlockPtr &block2)
Definition CppBlock.cpp:176
This file offers overloads of toIce() and fromIce() functions for STL container types.
std::shared_ptr< CppWriter > CppWriterPtr
Definition CppWriter.h:35
std::shared_ptr< CppBlock > CppBlockPtr
Definition CppBlock.h:37
std::shared_ptr< CppBlockEntry > CppBlockEntryPtr
Definition CppBlock.h:40