blob: 6453166d4ef40919ff608c7afd6920b9acb10d5a [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
Andreas Huberc9410c72016-07-28 12:18:40 -070040private:
Andreas Huber881227d2016-08-02 14:20:21 -070041 std::vector<EnumValue *> *mValues;
Andreas Huberc9410c72016-07-28 12:18:40 -070042 Type *mStorageType;
43
44 DISALLOW_COPY_AND_ASSIGN(EnumType);
45};
46
Andreas Huber31629bc2016-08-03 09:06:40 -070047struct EnumValue {
48 EnumValue(const char *name, const char *value = NULL);
49
50 std::string name() const;
51 const char *value() const;
52
53private:
54 std::string mName;
55 const char *mValue;
56
57 DISALLOW_COPY_AND_ASSIGN(EnumValue);
58};
59
Andreas Huberc9410c72016-07-28 12:18:40 -070060} // namespace android
61
62#endif // ENUM_TYPE_H_
63