TypeDef.h revision 505316c499a4dbb95f6567e8531fb6f1e74c3ded
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 TYPE_DEF_H_
18c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber
19c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber#define TYPE_DEF_H_
20c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber
21d537ab02e1707597d70665fd8c75ca1ec9f57326Steven Moreland#include "NamedType.h"
22c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber
23c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Hubernamespace android {
24c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber
25d537ab02e1707597d70665fd8c75ca1ec9f57326Steven Morelandstruct TypeDef : public NamedType {
26505316c499a4dbb95f6567e8531fb6f1e74c3dedTimur Iskhakov    TypeDef(const char* localName, const Location& location, Scope* parent,
27505316c499a4dbb95f6567e8531fb6f1e74c3dedTimur Iskhakov            const Reference<Type>& type);
28c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber
29737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber    const ScalarType *resolveToScalarType() const override;
30737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber
310ecc7b8aca24a5618512610bb6371bdb91b5fdc2Steven Moreland    std::string typeName() const override;
320ecc7b8aca24a5618512610bb6371bdb91b5fdc2Steven Moreland
33505316c499a4dbb95f6567e8531fb6f1e74c3dedTimur Iskhakov    Type* referencedType() const;
34c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber
355a545440766886a1bbd09ed7221bb337705e5d14Andreas Huber    bool isInterface() const override;
368d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber    bool isEnum() const override;
378d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber    bool isTypeDef() const override;
38bb797e4ba03e95cd0b20aa77b83717dcf8cc6287Andreas Huber    bool needsEmbeddedReadWrite() const override;
39bb797e4ba03e95cd0b20aa77b83717dcf8cc6287Andreas Huber    bool resultNeedsDeref() const override;
40bb797e4ba03e95cd0b20aa77b83717dcf8cc6287Andreas Huber
412a55e05a26aa8e84433eb6c3e06175ccf45d4e92Steven Moreland    status_t emitTypeDeclarations(Formatter &out) const override;
422a55e05a26aa8e84433eb6c3e06175ccf45d4e92Steven Moreland
43505316c499a4dbb95f6567e8531fb6f1e74c3dedTimur Iskhakov   private:
44505316c499a4dbb95f6567e8531fb6f1e74c3dedTimur Iskhakov    Reference<Type> mReferencedType;
45c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber
46c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber    DISALLOW_COPY_AND_ASSIGN(TypeDef);
47c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber};
48c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber
49c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber}  // namespace android
50c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber
51c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber#endif  // TYPE_DEF_H_
52c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber
53