blob: 7aa55e55cfea98a935de9f85ea09dc3b32766a47 [file] [log] [blame]
Andreas Huberc9410c72016-07-28 12:18:40 -07001#ifndef ENUM_TYPE_H_
2
3#define ENUM_TYPE_H_
4
5#include "NamedType.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 EnumValue;
Andreas Huberc9410c72016-07-28 12:18:40 -070012
13struct EnumType : public NamedType {
Andreas Huber31629bc2016-08-03 09:06:40 -070014 EnumType(std::vector<EnumValue *> *values,
Andreas Huberc9410c72016-07-28 12:18:40 -070015 Type *storageType = NULL);
16
Andreas Huber8d3ac0c2016-08-04 14:49:23 -070017 const Type *storageType() const;
18 const std::vector<EnumValue *> &values() const;
19
Andreas Huber737080b2016-08-02 15:38:04 -070020 const ScalarType *resolveToScalarType() const override;
21
Andreas Huber8d3ac0c2016-08-04 14:49:23 -070022 bool isEnum() const override;
23
Andreas Huber881227d2016-08-02 14:20:21 -070024 std::string getCppType(StorageMode mode, std::string *extra) const override;
25
Andreas Huber2831d512016-08-15 09:33:47 -070026 std::string getJavaType() const override;
27 std::string getJavaSuffix() const override;
28
Andreas Huber881227d2016-08-02 14:20:21 -070029 void emitReaderWriter(
30 Formatter &out,
31 const std::string &name,
32 const std::string &parcelObj,
33 bool parcelObjIsPointer,
34 bool isReader,
35 ErrorMode mode) const override;
36
37 status_t emitTypeDeclarations(Formatter &out) const override;
Andreas Huber2831d512016-08-15 09:33:47 -070038 status_t emitJavaTypeDeclarations(Formatter &out) const override;
Andreas Huber881227d2016-08-02 14:20:21 -070039
Zhuoyao Zhang5158db42016-08-10 10:25:20 -070040 status_t emitVtsTypeDeclarations(Formatter &out) const override;
41 status_t emitVtsArgumentType(Formatter &out) const override;
42
Andreas Huberc9410c72016-07-28 12:18:40 -070043private:
Andreas Huber881227d2016-08-02 14:20:21 -070044 std::vector<EnumValue *> *mValues;
Andreas Huberc9410c72016-07-28 12:18:40 -070045 Type *mStorageType;
46
47 DISALLOW_COPY_AND_ASSIGN(EnumType);
48};
49
Andreas Huber31629bc2016-08-03 09:06:40 -070050struct EnumValue {
51 EnumValue(const char *name, const char *value = NULL);
52
53 std::string name() const;
54 const char *value() const;
55
56private:
57 std::string mName;
58 const char *mValue;
59
60 DISALLOW_COPY_AND_ASSIGN(EnumValue);
61};
62
Andreas Huberc9410c72016-07-28 12:18:40 -070063} // namespace android
64
65#endif // ENUM_TYPE_H_
66