IntEnumClass.h
Go to the documentation of this file.
1 /*
2  * This file is part of ArmarX.
3  *
4  * Copyright (C) 2012-2016, High Performance Humanoid Technologies (H2T),
5  * Karlsruhe Institute of Technology (KIT), all rights reserved.
6  *
7  * ArmarX is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License version 2 as
9  * published by the Free Software Foundation.
10  *
11  * ArmarX is distributed in the hope that it will be useful, but
12  * WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program. If not, see <http://www.gnu.org/licenses/>.
18  *
19  * @author Fabian Peller-Konrad (fabian dot peller-konrad at kit dot edu)
20  * @copyright http://www.gnu.org/licenses/gpl-2.0.txt
21  * GNU General Public License
22  */
23 
24 #pragma once
25 
26 #include <map>
27 #include <utility> // std::pair
28 
31 
33 {
34  class IntEnumClass : public detail::SpecializedGeneratorBase<type::IntEnum, IntEnumClass>
35  {
36  public:
37  // constructors
39  virtual ~IntEnumClass() = default;
40 
41  // virtual implementations
42  std::vector<CppFieldPtr> getPublicVariableDeclarations(const std::string&) const final;
43 
44  CppBlockPtr getResetHardBlock(const std::string& cppAccessor) const final;
45  CppBlockPtr getResetSoftBlock(const std::string& cppAccessor) const final;
46  CppBlockPtr getWriteTypeBlock(const std::string& typeAccessor,
47  const std::string& cppAccessor,
48  const Path&,
49  std::string& variantAccessor) const final;
50  CppBlockPtr getWriteBlock(const std::string& cppAccessor,
51  const Path&,
52  std::string& variantAccessor) const final;
53  CppBlockPtr getReadBlock(const std::string& cppAccessor,
54  const std::string& variantAccessor) const final;
55  CppBlockPtr getEqualsBlock(const std::string&, const std::string&) const final;
56 
57  // TODO: Move some of those methods to upper class for enums (if we want to support multiple enums)
58  //CppCtorPtr toCopyCtor(const std::string&) const;
59  std::vector<CppEnumFieldPtr> toEnumFields() const;
60  CppCtorPtr toEnumCtor(const std::string&) const;
61  CppMethodPtr toIntMethod() const;
67 
68  private:
69  // Members
70  static const std::map<std::string, std::pair<std::string, int>> ACCEPTED_TYPES;
71  static constexpr const char* IMPL_ENUM = "ImplEnum";
72  };
73 } // namespace armarx::aron::codegenerator::cpp::generator
armarx::CppCtorPtr
std::shared_ptr< CppCtor > CppCtorPtr
Definition: CppCtor.h:31
IntEnum.h
armarx::aron::codegenerator::cpp::generator::IntEnumClass::getResetSoftBlock
CppBlockPtr getResetSoftBlock(const std::string &cppAccessor) const final
Definition: IntEnumClass.cpp:120
armarx::aron::codegenerator::cpp::generator::IntEnumClass::toFromStringMethod
CppMethodPtr toFromStringMethod() const
Definition: IntEnumClass.cpp:319
armarx::aron::codegenerator::cpp::generator::IntEnumClass::toEnumCtor
CppCtorPtr toEnumCtor(const std::string &) const
Definition: IntEnumClass.cpp:211
armarx::CppBlockPtr
std::shared_ptr< CppBlock > CppBlockPtr
Definition: CppBlock.h:35
armarx::aron::codegenerator::cpp::generator::IntEnumClass::toIntMethod
CppMethodPtr toIntMethod() const
Definition: IntEnumClass.cpp:232
armarx::aron::codegenerator::cpp::generator::IntEnumClass::getPublicVariableDeclarations
std::vector< CppFieldPtr > getPublicVariableDeclarations(const std::string &) const final
Definition: IntEnumClass.cpp:51
armarx::aron::codegenerator::cpp::generator::IntEnumClass::toToStringMethod
CppMethodPtr toToStringMethod() const
Definition: IntEnumClass.cpp:305
SpecializedGenerator.h
armarx::aron::codegenerator::cpp::generator::IntEnumClass::getWriteBlock
CppBlockPtr getWriteBlock(const std::string &cppAccessor, const Path &, std::string &variantAccessor) const final
Definition: IntEnumClass.cpp:159
armarx::aron::type::IntEnum
The IntEnum class.
Definition: IntEnum.h:42
armarx::aron::Path
The Path class.
Definition: Path.h:36
armarx::aron::codegenerator::cpp::generator::IntEnumClass::toIntAssignmentMethod
CppMethodPtr toIntAssignmentMethod() const
Definition: IntEnumClass.cpp:281
armarx::aron::codegenerator::cpp::generator::IntEnumClass::getEqualsBlock
CppBlockPtr getEqualsBlock(const std::string &, const std::string &) const final
Definition: IntEnumClass.cpp:192
armarx::aron::codegenerator::cpp::generator::IntEnumClass::getReadBlock
CppBlockPtr getReadBlock(const std::string &cppAccessor, const std::string &variantAccessor) const final
Definition: IntEnumClass.cpp:170
armarx::aron::codegenerator::cpp::generator::IntEnumClass::toEnumFields
std::vector< CppEnumFieldPtr > toEnumFields() const
Definition: IntEnumClass.cpp:221
armarx::CppMethodPtr
std::shared_ptr< CppMethod > CppMethodPtr
Definition: CppMethod.h:32
armarx::aron::codegenerator::cpp::generator::detail::SpecializedGeneratorBase
Definition: SpecializedGenerator.h:35
armarx::aron::codegenerator::cpp::generator::IntEnumClass::~IntEnumClass
virtual ~IntEnumClass()=default
armarx::aron::codegenerator::cpp::generator::IntEnumClass::toCopyAssignmentMethod
CppMethodPtr toCopyAssignmentMethod() const
Definition: IntEnumClass.cpp:246
armarx::aron::codegenerator::cpp::generator
Definition: AnyObject.cpp:29
armarx::aron::codegenerator::cpp::generator::IntEnumClass::getWriteTypeBlock
CppBlockPtr getWriteTypeBlock(const std::string &typeAccessor, const std::string &cppAccessor, const Path &, std::string &variantAccessor) const final
Definition: IntEnumClass.cpp:136
armarx::aron::codegenerator::cpp::generator::IntEnumClass::getResetHardBlock
CppBlockPtr getResetHardBlock(const std::string &cppAccessor) const final
Definition: IntEnumClass.cpp:128
armarx::aron::codegenerator::cpp::generator::IntEnumClass::toEnumAssignmentMethod
CppMethodPtr toEnumAssignmentMethod() const
Definition: IntEnumClass.cpp:264
armarx::aron::codegenerator::cpp::generator::IntEnumClass
Definition: IntEnumClass.h:34
armarx::aron::codegenerator::cpp::generator::IntEnumClass::IntEnumClass
IntEnumClass(const type::IntEnum &)
Definition: IntEnumClass.cpp:32