blob: 6d5724fc3d9f0402fa7539d27f9d1212ed81539b [file] [log] [blame]
Andreas Huberc9410c72016-07-28 12:18:40 -07001#ifndef COMPOUND_TYPE_H_
2
3#define COMPOUND_TYPE_H_
4
5#include "Scope.h"
6
Andreas Huber881227d2016-08-02 14:20:21 -07007#include <vector>
Andreas Huberc9410c72016-07-28 12:18:40 -07008
9namespace android {
10
Andreas Huber31629bc2016-08-03 09:06:40 -070011struct CompoundField;
Andreas Huberc9410c72016-07-28 12:18:40 -070012
13struct CompoundType : public Scope {
14 enum Style {
15 STYLE_STRUCT,
16 STYLE_UNION,
17 };
18
Andreas Huber9ed827c2016-08-22 12:31:13 -070019 CompoundType(Style style, const char *localName);
Andreas Huberc9410c72016-07-28 12:18:40 -070020
Andreas Huber0d0f9a22016-08-17 10:26:11 -070021 bool setFields(std::vector<CompoundField *> *fields, std::string *errorMsg);
Andreas Huberc9410c72016-07-28 12:18:40 -070022
Andreas Huber881227d2016-08-02 14:20:21 -070023 std::string getCppType(StorageMode mode, std::string *extra) const override;
24
25 void emitReaderWriter(
26 Formatter &out,
27 const std::string &name,
28 const std::string &parcelObj,
29 bool parcelObjIsPointer,
30 bool isReader,
31 ErrorMode mode) const override;
32
33 void emitReaderWriterEmbedded(
34 Formatter &out,
35 const std::string &name,
36 bool nameIsPointer,
37 const std::string &parcelObj,
38 bool parcelObjIsPointer,
39 bool isReader,
40 ErrorMode mode,
41 const std::string &parentName,
42 const std::string &offsetText) const override;
43
44 status_t emitTypeDeclarations(Formatter &out) const override;
45
46 status_t emitTypeDefinitions(
47 Formatter &out, const std::string prefix) const override;
48
49 bool needsEmbeddedReadWrite() const override;
50 bool resultNeedsDeref() const override;
51
Zhuoyao Zhang5158db42016-08-10 10:25:20 -070052 status_t emitVtsTypeDeclarations(Formatter &out) const override;
Zhuoyao Zhang864c7712016-08-16 15:35:28 -070053 status_t emitVtsAttributeType(Formatter &out) const override;
Zhuoyao Zhang5158db42016-08-10 10:25:20 -070054
Andreas Huber70a59e12016-08-16 12:57:01 -070055 bool isJavaCompatible() const override;
56
Andreas Huberc9410c72016-07-28 12:18:40 -070057private:
58 Style mStyle;
Andreas Huber881227d2016-08-02 14:20:21 -070059 std::vector<CompoundField *> *mFields;
60
61 void emitStructReaderWriter(
62 Formatter &out, const std::string &prefix, bool isReader) const;
Andreas Huberc9410c72016-07-28 12:18:40 -070063
64 DISALLOW_COPY_AND_ASSIGN(CompoundType);
65};
66
Andreas Huber31629bc2016-08-03 09:06:40 -070067struct CompoundField {
68 CompoundField(const char *name, Type *type);
69
70 std::string name() const;
71 const Type &type() const;
72
73private:
74 std::string mName;
75 Type *mType;
76
77 DISALLOW_COPY_AND_ASSIGN(CompoundField);
78};
79
Andreas Huberc9410c72016-07-28 12:18:40 -070080} // namespace android
81
82#endif // COMPOUND_TYPE_H_
83