eRPC Generator (erpcgen)  Rev. 1.11.0
NXP Semiconductors
UnionType.hpp
1 /*
2  * Copyright (c) 2016, Freescale Semiconductor, Inc.
3  * Copyright 2016-2017 NXP
4  * All rights reserved.
5  *
6  *
7  * SPDX-License-Identifier: BSD-3-Clause
8  */
9 
10 #ifndef _EMBEDDED_RPC__UNIONTYPE_H_
11 #define _EMBEDDED_RPC__UNIONTYPE_H_
12 
13 #include "DataType.hpp"
14 #include "StructType.hpp"
15 #include "UnionCase.hpp"
16 
17 #include <map>
18 
20 // Classes
22 
23 namespace erpcgen {
24 
28 class UnionType : public DataType
29 {
30 public:
31  typedef std::vector<UnionCase *> case_vector_t;
42  UnionType(const std::string &name, const std::string &discriminatorName)
43  : DataType(name, kUnionType)
44  , m_discriminator(discriminatorName)
45  , m_members("(union)")
46  , m_parentStruct(nullptr)
47  {
48  }
49 
59  UnionType(const Token &tok, const std::string &discriminatorName)
60  : DataType(tok, kUnionType)
61  , m_discriminator(discriminatorName)
62  , m_members("(union)")
63  , m_parentStruct(nullptr)
64  {
65  }
66 
70  StructType *getParentStruct() { return m_parentStruct; }
71 
75  void setParentStruct(StructType *parent) { m_parentStruct = parent; }
76 
82  void addCase(UnionCase *unionCase);
83 
97  virtual std::string getDescription() const override;
98 
105  bool isNonEncapsulatedUnion() const { return m_discriminator.compare("") == 0; }
106 
112  case_vector_t &getCases() { return m_unionCases; }
113 
119  case_vector_t getUniqueCases();
120 
127  bool addUnionMemberDeclaration(const std::string &name, DataType *dataType);
128 
134  StructType &getUnionMembers() { return m_members; }
135 
143  StructMember *getUnionMemberDeclaration(const std::string &name);
144 
150  std::string getDiscriminatorName() { return m_discriminator; }
151 
155  void printUnionMembers();
156 
165  bool declarationExists(const std::string &name);
166 
167 private:
168  std::string m_discriminator;
169  case_vector_t m_unionCases;
170  StructType m_members;
171  StructType *m_parentStruct;
182  bool casesAreTheSame(UnionCase *a, UnionCase *b);
183 };
184 
185 } // namespace erpcgen
186 
187 #endif // _EMBEDDED_RPC__UNIONTYPE_H_
case_vector_t getUniqueCases()
This function returns unique union cases vector.
Definition: Type.cpp:592
Member of a struct.
Definition: StructMember.hpp:38
void printUnionMembers()
This function prints information about union members.
Definition: Type.cpp:667
std::vector< UnionCase * > case_vector_t
Definition: UnionType.hpp:31
StructMember * getUnionMemberDeclaration(const std::string &name)
This function returns union member declaration.
Definition: Type.cpp:655
virtual std::string getDescription() const override
This function returns description about the union.
Definition: Type.cpp:582
Discriminated union case type.
Definition: UnionCase.hpp:26
Structure data type.
Definition: StructType.hpp:29
void setParentStruct(StructType *parent)
Sets the struct owning this union.
Definition: UnionType.hpp:75
void addCase(UnionCase *unionCase)
This function will add union case to current union.
Definition: Type.cpp:576
StructType & getUnionMembers()
This function returns struct of union members.
Definition: UnionType.hpp:134
UnionType(const Token &tok, const std::string &discriminatorName)
Constructor.
Definition: UnionType.hpp:59
std::string getDiscriminatorName()
This function returns union discriminator name.
Definition: UnionType.hpp:150
Base class for data types.
Definition: DataType.hpp:26
Encapsulates all information about a token.
Definition: Token.hpp:60
UnionType(const std::string &name, const std::string &discriminatorName)
Constructor.
Definition: UnionType.hpp:42
bool isNonEncapsulatedUnion() const
This function return "true" value for identify non-encapsulated discriminated union type...
Definition: UnionType.hpp:105
Discriminated union data type.
Definition: UnionType.hpp:28
StructType * getParentStruct()
Returns the struct owning this union.
Definition: UnionType.hpp:70
bool addUnionMemberDeclaration(const std::string &name, DataType *dataType)
This function adds unique union member declaration.
Definition: Type.cpp:632
case_vector_t & getCases()
This function returns union cases vector.
Definition: UnionType.hpp:112
Definition: AstNode.hpp:26
bool declarationExists(const std::string &name)
This function is looking for member declaration.
Definition: Type.cpp:643