Type.h revision 881227d860c59471eee31d39946e96ce2daa35d6
1c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber#ifndef TYPE_H_
2c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber
3c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber#define TYPE_H_
4c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber
5c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber#include <android-base/macros.h>
6881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber#include <string>
7881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber#include <utils/Errors.h>
8c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber
9c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Hubernamespace android {
10c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber
11c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huberstruct Formatter;
12c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber
13c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huberstruct Type {
14c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber    Type();
15c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber    virtual ~Type();
16c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber
17c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber    virtual void dump(Formatter &out) const = 0;
185345ec2b1b7e4126b77aa2131b231a9eb5ee811dAndreas Huber    virtual bool isScope() const;
19a2723d26427f7db19777dfed330047253e7a4e1bAndreas Huber    virtual bool isInterface() const;
20c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber
21881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    enum StorageMode {
22881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        StorageMode_Stack,
23881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        StorageMode_Argument,
24881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        StorageMode_Result
25881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    };
26881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    virtual std::string getCppType(
27881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            StorageMode mode, std::string *extra) const;
28881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber
29881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    // Convenience, gets StorageMode_Stack type.
30881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    std::string getCppType(std::string *extra) const;
31881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber
32881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    std::string getCppResultType(std::string *extra) const;
33881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    std::string getCppArgumentType(std::string *extra) const;
34881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber
35881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    enum ErrorMode {
36881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        ErrorMode_Ignore,
37881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        ErrorMode_Goto,
38881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        ErrorMode_Break,
39881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    };
40881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    virtual void emitReaderWriter(
41881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            Formatter &out,
42881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            const std::string &name,
43881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            const std::string &parcelObj,
44881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            bool parcelObjIsPointer,
45881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            bool isReader,
46881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            ErrorMode mode) const;
47881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber
48881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    virtual void emitReaderWriterEmbedded(
49881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            Formatter &out,
50881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            const std::string &name,
51881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            bool nameIsPointer,
52881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            const std::string &parcelObj,
53881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            bool parcelObjIsPointer,
54881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            bool isReader,
55881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            ErrorMode mode,
56881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            const std::string &parentName,
57881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            const std::string &offsetText) const;
58881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber
59881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    virtual status_t emitTypeDeclarations(Formatter &out) const;
60881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber
61881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    virtual status_t emitTypeDefinitions(
62881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            Formatter &out, const std::string prefix) const;
63881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber
64881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    virtual bool needsEmbeddedReadWrite() const;
65881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    virtual bool resultNeedsDeref() const;
66881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber
67881227d860c59471eee31d39946e96ce2daa35d6Andreas Huberprotected:
68881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    void handleError(Formatter &out, ErrorMode mode) const;
69881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    void handleError2(Formatter &out, ErrorMode mode) const;
70881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber
71881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    void emitReaderWriterEmbeddedForTypeName(
72881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            Formatter &out,
73881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            const std::string &name,
74881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            bool nameIsPointer,
75881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            const std::string &parcelObj,
76881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            bool parcelObjIsPointer,
77881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            bool isReader,
78881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            ErrorMode mode,
79881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            const std::string &parentName,
80881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            const std::string &offsetText,
81881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            const std::string &typeName,
82881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            const std::string &childName) const;
83881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber
84c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huberprivate:
85c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber    DISALLOW_COPY_AND_ASSIGN(Type);
86c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber};
87c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber
88c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber}  // namespace android
89c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber
90c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber#endif  // TYPE_H_
91c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber
92