Home | History | Annotate | Download | only in hidl
      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 VECTOR_TYPE_H_
     18 
     19 #define VECTOR_TYPE_H_
     20 
     21 #include "Type.h"
     22 
     23 namespace android {
     24 
     25 struct VectorType : public TemplatedType {
     26     VectorType();
     27 
     28     bool isVector() const override;
     29     bool isVectorOfBinders() const;
     30     std::string typeName() const override;
     31     bool isCompatibleElementType(Type *elementType) const override;
     32 
     33     bool canCheckEquality() const override;
     34 
     35     void addNamedTypesToSet(std::set<const FQName> &set) const override;
     36 
     37     std::string getCppType(
     38             StorageMode mode,
     39             bool specifyNamespaces) const override;
     40 
     41     std::string getJavaType(bool forInitializer) const override;
     42 
     43     std::string getVtsType() const override;
     44     std::string getVtsValueName() const override;
     45 
     46     void emitReaderWriter(
     47             Formatter &out,
     48             const std::string &name,
     49             const std::string &parcelObj,
     50             bool parcelObjIsPointer,
     51             bool isReader,
     52             ErrorMode mode) const override;
     53 
     54     void emitReaderWriterEmbedded(
     55             Formatter &out,
     56             size_t depth,
     57             const std::string &name,
     58             const std::string &sanitizedName,
     59             bool nameIsPointer,
     60             const std::string &parcelObj,
     61             bool parcelObjIsPointer,
     62             bool isReader,
     63             ErrorMode mode,
     64             const std::string &parentName,
     65             const std::string &offsetText) const override;
     66 
     67     void emitResolveReferences(
     68             Formatter &out,
     69             const std::string &name,
     70             bool nameIsPointer,
     71             const std::string &parcelObj,
     72             bool parcelObjIsPointer,
     73             bool isReader,
     74             ErrorMode mode) const override;
     75 
     76     void emitResolveReferencesEmbedded(
     77             Formatter &out,
     78             size_t depth,
     79             const std::string &name,
     80             const std::string &sanitizedName,
     81             bool nameIsPointer,
     82             const std::string &parcelObj,
     83             bool parcelObjIsPointer,
     84             bool isReader,
     85             ErrorMode mode,
     86             const std::string &parentName,
     87             const std::string &offsetText) const override;
     88 
     89     bool useParentInEmitResolveReferencesEmbedded() const override;
     90 
     91     void emitJavaReaderWriter(
     92             Formatter &out,
     93             const std::string &parcelObj,
     94             const std::string &argName,
     95             bool isReader) const override;
     96 
     97     void emitJavaFieldInitializer(
     98             Formatter &out, const std::string &fieldName) const override;
     99 
    100     void emitJavaFieldReaderWriter(
    101             Formatter &out,
    102             size_t depth,
    103             const std::string &parcelName,
    104             const std::string &blobName,
    105             const std::string &fieldName,
    106             const std::string &offset,
    107             bool isReader) const override;
    108 
    109     static void EmitJavaFieldReaderWriterForElementType(
    110             Formatter &out,
    111             size_t depth,
    112             const Type *elementType,
    113             const std::string &parcelName,
    114             const std::string &blobName,
    115             const std::string &fieldName,
    116             const std::string &offset,
    117             bool isReader);
    118 
    119     bool needsEmbeddedReadWrite() const override;
    120     bool needsResolveReferences() const override;
    121     bool resultNeedsDeref() const override;
    122 
    123     bool isJavaCompatible() const override;
    124     bool containsPointer() const override;
    125 
    126     void getAlignmentAndSize(size_t *align, size_t *size) const override;
    127     static void getAlignmentAndSizeStatic(size_t *align, size_t *size);
    128  private:
    129     // Helper method for emitResolveReferences[Embedded].
    130     // Pass empty childName and childOffsetText if the original
    131     // childHandle is unknown.
    132     // For example, given a vec<ref<T>> (T is a simple struct that
    133     // contains primitive values only), then the following methods are
    134     // invoked:
    135     // 1. VectorType::emitResolveReferences
    136     //    ... which calls the helper with empty childName and childOffsetText
    137     // 2. RefType::emitResolveReferencesEmbedded
    138     void emitResolveReferencesEmbeddedHelper(
    139             Formatter &out,
    140             size_t depth,
    141             const std::string &name,
    142             const std::string &sanitizedName,
    143             bool nameIsPointer,
    144             const std::string &parcelObj,
    145             bool parcelObjIsPointer,
    146             bool isReader,
    147             ErrorMode mode,
    148             const std::string &childName,
    149             const std::string &childOffsetText) const;
    150 
    151     void emitReaderWriterForVectorOfBinders(
    152             Formatter &out,
    153             const std::string &name,
    154             const std::string &parcelObj,
    155             bool parcelObjIsPointer,
    156             bool isReader,
    157             ErrorMode mode) const;
    158 
    159     DISALLOW_COPY_AND_ASSIGN(VectorType);
    160 };
    161 
    162 }  // namespace android
    163 
    164 #endif  // VECTOR_TYPE_H_
    165 
    166