ArrayType.h revision 709b62dbda6184770bb34470ff550e02c1643e67
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
23709b62dbda6184770bb34470ff550e02c1643e67Andreas Huber#include <vector>
24c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber
25c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Hubernamespace android {
26c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber
27c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huberstruct ArrayType : public Type {
28709b62dbda6184770bb34470ff550e02c1643e67Andreas Huber    // Extends existing array by adding another dimension.
29709b62dbda6184770bb34470ff550e02c1643e67Andreas Huber    ArrayType(ArrayType *srcArray, size_t size);
30709b62dbda6184770bb34470ff550e02c1643e67Andreas Huber
31709b62dbda6184770bb34470ff550e02c1643e67Andreas Huber    ArrayType(Type *elementType, size_t size);
32709b62dbda6184770bb34470ff550e02c1643e67Andreas Huber
33709b62dbda6184770bb34470ff550e02c1643e67Andreas Huber    static ArrayType *AddDimension(ArrayType *base, size_t size);
34709b62dbda6184770bb34470ff550e02c1643e67Andreas Huber
35709b62dbda6184770bb34470ff550e02c1643e67Andreas Huber    bool isArray() const override;
36709b62dbda6184770bb34470ff550e02c1643e67Andreas Huber
37709b62dbda6184770bb34470ff550e02c1643e67Andreas Huber    void addDimension(size_t size);
38c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber
39979e099f1163ff75beed5776cd01fb409b90a0cdSteven Moreland    std::string getCppType(StorageMode mode,
40979e099f1163ff75beed5776cd01fb409b90a0cdSteven Moreland                           std::string *extra,
41979e099f1163ff75beed5776cd01fb409b90a0cdSteven Moreland                           bool specifyNamespaces) const override;
42979e099f1163ff75beed5776cd01fb409b90a0cdSteven Moreland
43979e099f1163ff75beed5776cd01fb409b90a0cdSteven Moreland    void addNamedTypesToSet(std::set<const FQName> &set) const override;
44881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber
454c865b72b320a46f326a335cfd326b66b0e10f67Andreas Huber    std::string getJavaType(
464c865b72b320a46f326a335cfd326b66b0e10f67Andreas Huber            std::string *extra, bool forInitializer) const override;
472831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber
48881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    void emitReaderWriter(
49881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            Formatter &out,
50881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            const std::string &name,
51881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            const std::string &parcelObj,
52881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            bool parcelObjIsPointer,
53881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            bool isReader,
54881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            ErrorMode mode) const override;
55881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber
56881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    void emitReaderWriterEmbedded(
57881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            Formatter &out,
58f9d49f1468bd65595f6f0ae5f4d7300f4e95edf8Andreas Huber            size_t depth,
59881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            const std::string &name,
60881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            bool nameIsPointer,
61881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            const std::string &parcelObj,
62881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            bool parcelObjIsPointer,
63881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            bool isReader,
64881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            ErrorMode mode,
65881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            const std::string &parentName,
66881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            const std::string &offsetText) const override;
67881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber
68881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    bool needsEmbeddedReadWrite() const override;
69881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber
702831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber    void emitJavaReaderWriter(
712831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber            Formatter &out,
722831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber            const std::string &parcelObj,
732831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber            const std::string &argName,
742831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber            bool isReader) const override;
752831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber
7685eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber    void emitJavaFieldInitializer(
7785eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber            Formatter &out, const std::string &fieldName) const override;
7885eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber
7985eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber    void emitJavaFieldReaderWriter(
8085eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber            Formatter &out,
814c865b72b320a46f326a335cfd326b66b0e10f67Andreas Huber            size_t depth,
82709b62dbda6184770bb34470ff550e02c1643e67Andreas Huber            const std::string &parcelName,
8385eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber            const std::string &blobName,
8485eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber            const std::string &fieldName,
8585eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber            const std::string &offset,
8685eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber            bool isReader) const override;
8785eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber
885158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhang    status_t emitVtsTypeDeclarations(Formatter &out) const override;
895158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhang
9070a59e1dc3dcf32f791d2dd7966111d4adf32ecaAndreas Huber    bool isJavaCompatible() const override;
9170a59e1dc3dcf32f791d2dd7966111d4adf32ecaAndreas Huber
9285eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber    void getAlignmentAndSize(size_t *align, size_t *size) const override;
9385eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber
94c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huberprivate:
95c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber    Type *mElementType;
96709b62dbda6184770bb34470ff550e02c1643e67Andreas Huber    std::vector<size_t> mSizes;
97c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber
98c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber    DISALLOW_COPY_AND_ASSIGN(ArrayType);
99c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber};
100c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber
101c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber}  // namespace android
102c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber
103c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber#endif  // ARRAY_TYPE_H_
104c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber
105