1/*
2 * Copyright (C) 2016 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#ifndef STRING_TYPE_H_
18
19#define STRING_TYPE_H_
20
21#include "Type.h"
22
23namespace android {
24
25struct StringType : public Type {
26    StringType();
27
28    bool isString() const override;
29
30    bool canCheckEquality() const override;
31
32    std::string typeName() const override;
33
34    std::string getCppType(
35            StorageMode mode,
36            bool specifyNamespaces) const override;
37
38    std::string getJavaType(bool /* forInitializer */) const override;
39
40    std::string getJavaSuffix() const override;
41
42    std::string getVtsType() const override;
43
44    void emitReaderWriter(
45            Formatter &out,
46            const std::string &name,
47            const std::string &parcelObj,
48            bool parcelObjIsPointer,
49            bool isReader,
50            ErrorMode mode) const override;
51
52    void emitReaderWriterEmbedded(
53            Formatter &out,
54            size_t depth,
55            const std::string &name,
56            const std::string & /*sanitizedName*/,
57            bool nameIsPointer,
58            const std::string &parcelObj,
59            bool parcelObjIsPointer,
60            bool isReader,
61            ErrorMode mode,
62            const std::string &parentName,
63            const std::string &offsetText) const override;
64
65    void emitJavaFieldInitializer(
66            Formatter &out, const std::string &fieldName) const override;
67
68    void emitJavaFieldReaderWriter(
69            Formatter &out,
70            size_t depth,
71            const std::string &parcelName,
72            const std::string &blobName,
73            const std::string &fieldName,
74            const std::string &offset,
75            bool isReader) const override;
76
77    bool needsEmbeddedReadWrite() const override;
78    bool resultNeedsDeref() const override;
79
80    status_t emitVtsTypeDeclarations(Formatter &out) const override;
81
82    void getAlignmentAndSize(size_t *align, size_t *size) const override;
83};
84
85}  // namespace android
86
87#endif  // STRING_TYPE_H_
88
89