eRPC Generator (erpcgen)  Rev. 1.7.2
NXP Semiconductors
UnionType.h
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.h"
14 #include "StructType.h"
15 #include "UnionCase.h"
16 #include <map>
17 
19 // Classes
21 
22 namespace erpcgen {
23 
27 class UnionType : public DataType
28 {
29 public:
30  typedef std::vector<UnionCase *> case_vector_t;
41  UnionType(const std::string &name, const std::string &discriminatorName)
42  : DataType(name, kUnionType, kUnionTypeSymbol)
43  , m_discriminator(discriminatorName)
44  , m_members("(union)")
45  , m_parentStruct(nullptr)
46  {
47  }
48 
58  UnionType(const Token &tok, const std::string &discriminatorName)
59  : DataType(tok, kUnionType, kUnionTypeSymbol)
60  , m_discriminator(discriminatorName)
61  , m_members("(union)")
62  , m_parentStruct(nullptr)
63  {
64  }
65 
69  StructType *getParentStruct() { return m_parentStruct; }
70 
74  void setParentStruct(StructType *parent) { m_parentStruct = parent; }
75 
81  void addCase(UnionCase *unionCase);
82 
96  virtual std::string getDescription() const;
97 
103  virtual bool isUnion() const { return true; }
104 
111  bool isNonEncapsulatedUnion() const { return m_discriminator.compare("") == 0; }
112 
118  case_vector_t &getCases() { return m_unionCases; }
119 
125  case_vector_t getUniqueCases();
126 
133  bool addUnionMemberDeclaration(const std::string &name, DataType *dataType);
134 
140  StructType &getUnionMembers() { return m_members; }
141 
149  StructMember *getUnionMemberDeclaration(const std::string &name);
150 
156  std::string getDiscriminatorName() { return m_discriminator; }
157 
161  void printUnionMembers();
162 
171  bool declarationExists(const std::string &name);
172 
173 private:
174  std::string m_discriminator;
175  case_vector_t m_unionCases;
176  StructType m_members;
177  StructType *m_parentStruct;
188  bool casesAreTheSame(UnionCase *a, UnionCase *b);
189 };
190 
191 } // namespace erpcgen
192 
193 #endif // _EMBEDDED_RPC__UNIONTYPE_H_
case_vector_t getUniqueCases()
This function returns unique union cases vector.
Definition: Type.cpp:592
virtual bool isUnion() const
This function return "true" value for identify union type.
Definition: UnionType.h:103
Member of a struct.
Definition: StructMember.h:37
void printUnionMembers()
This function prints information about union members.
Definition: Type.cpp:667
std::vector< UnionCase * > case_vector_t
Definition: UnionType.h:30
StructMember * getUnionMemberDeclaration(const std::string &name)
This function returns union member declaration.
Definition: Type.cpp:655
Discriminated union case type.
Definition: UnionCase.h:26
Structure data type.
Definition: StructType.h:28
void setParentStruct(StructType *parent)
Sets the struct owning this union.
Definition: UnionType.h:74
void addCase(UnionCase *unionCase)
This function will add union case to current union.
Definition: Type.cpp:576
virtual std::string getDescription() const
This function returns description about the union.
Definition: Type.cpp:582
StructType & getUnionMembers()
This function returns struct of union members.
Definition: UnionType.h:140
UnionType(const Token &tok, const std::string &discriminatorName)
Constructor.
Definition: UnionType.h:58
std::string getDiscriminatorName()
This function returns union discriminator name.
Definition: UnionType.h:156
Base class for data types.
Definition: DataType.h:25
Encapsulates all information about a token.
Definition: Token.h:60
UnionType(const std::string &name, const std::string &discriminatorName)
Constructor.
Definition: UnionType.h:41
bool isNonEncapsulatedUnion() const
This function return "true" value for identify non-encapsulated discriminated union type...
Definition: UnionType.h:111
Discriminated union data type.
Definition: UnionType.h:27
StructType * getParentStruct()
Returns the struct owning this union.
Definition: UnionType.h:69
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.h:118
Definition: AstNode.h:25
bool declarationExists(const std::string &name)
This function is looking for member declaration.
Definition: Type.cpp:643