ArrayType.h revision 4c865b72b320a46f326a335cfd326b66b0e10f67
11aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber/*
21aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber * Copyright (C) 2016 The Android Open Source Project
31aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber *
41aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License");
51aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber * you may not use this file except in compliance with the License.
61aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber * You may obtain a copy of the License at
71aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber *
81aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber *      http://www.apache.org/licenses/LICENSE-2.0
91aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber *
101aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber * Unless required by applicable law or agreed to in writing, software
111aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS,
121aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
131aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber * See the License for the specific language governing permissions and
141aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber * limitations under the License.
151aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber */
161aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber
17c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber#ifndef ARRAY_TYPE_H_
18c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber
19c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber#define ARRAY_TYPE_H_
20c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber
21c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber#include "Type.h"
22c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber
23c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber#include <string>
24c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber
25c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Hubernamespace android {
26c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber
27c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huberstruct ArrayType : public Type {
28c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber    ArrayType(Type *elementType, const char *dimension);
29c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber
30979e099f1163ff75beed5776cd01fb409b90a0cdSteven Moreland    std::string getCppType(StorageMode mode,
31979e099f1163ff75beed5776cd01fb409b90a0cdSteven Moreland                           std::string *extra,
32979e099f1163ff75beed5776cd01fb409b90a0cdSteven Moreland                           bool specifyNamespaces) const override;
33979e099f1163ff75beed5776cd01fb409b90a0cdSteven Moreland
34979e099f1163ff75beed5776cd01fb409b90a0cdSteven Moreland    void addNamedTypesToSet(std::set<const FQName> &set) const override;
35881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber
364c865b72b320a46f326a335cfd326b66b0e10f67Andreas Huber    std::string getJavaType(
374c865b72b320a46f326a335cfd326b66b0e10f67Andreas Huber            std::string *extra, bool forInitializer) const override;
382831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber
39881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    void emitReaderWriter(
40881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            Formatter &out,
41881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            const std::string &name,
42881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            const std::string &parcelObj,
43881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            bool parcelObjIsPointer,
44881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            bool isReader,
45881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            ErrorMode mode) const override;
46881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber
47881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    void emitReaderWriterEmbedded(
48881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            Formatter &out,
49f9d49f1468bd65595f6f0ae5f4d7300f4e95edf8Andreas Huber            size_t depth,
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 override;
58881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber
59881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    bool needsEmbeddedReadWrite() const override;
60881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber
612831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber    void emitJavaReaderWriter(
622831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber            Formatter &out,
632831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber            const std::string &parcelObj,
642831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber            const std::string &argName,
652831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber            bool isReader) const override;
662831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber
6785eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber    void emitJavaFieldInitializer(
6885eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber            Formatter &out, const std::string &fieldName) const override;
6985eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber
7085eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber    void emitJavaFieldReaderWriter(
7185eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber            Formatter &out,
724c865b72b320a46f326a335cfd326b66b0e10f67Andreas Huber            size_t depth,
7385eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber            const std::string &blobName,
7485eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber            const std::string &fieldName,
7585eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber            const std::string &offset,
7685eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber            bool isReader) const override;
7785eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber
785158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhang    status_t emitVtsTypeDeclarations(Formatter &out) const override;
795158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhang
8070a59e1dc3dcf32f791d2dd7966111d4adf32ecaAndreas Huber    bool isJavaCompatible() const override;
8170a59e1dc3dcf32f791d2dd7966111d4adf32ecaAndreas Huber
8285eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber    void getAlignmentAndSize(size_t *align, size_t *size) const override;
8385eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber
84c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huberprivate:
85c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber    Type *mElementType;
86c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber    std::string mDimension;
87c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber
88c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber    DISALLOW_COPY_AND_ASSIGN(ArrayType);
89c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber};
90c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber
91c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber}  // namespace android
92c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber
93c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber#endif  // ARRAY_TYPE_H_
94c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber
95