1c383a500aa59423264811be3874461bf8adbfea0Zonr Chang/* 2c383a500aa59423264811be3874461bf8adbfea0Zonr Chang * Copyright 2010, The Android Open Source Project 3c383a500aa59423264811be3874461bf8adbfea0Zonr Chang * 4c383a500aa59423264811be3874461bf8adbfea0Zonr Chang * Licensed under the Apache License, Version 2.0 (the "License"); 5c383a500aa59423264811be3874461bf8adbfea0Zonr Chang * you may not use this file except in compliance with the License. 6c383a500aa59423264811be3874461bf8adbfea0Zonr Chang * You may obtain a copy of the License at 7c383a500aa59423264811be3874461bf8adbfea0Zonr Chang * 8c383a500aa59423264811be3874461bf8adbfea0Zonr Chang * http://www.apache.org/licenses/LICENSE-2.0 9c383a500aa59423264811be3874461bf8adbfea0Zonr Chang * 10c383a500aa59423264811be3874461bf8adbfea0Zonr Chang * Unless required by applicable law or agreed to in writing, software 11c383a500aa59423264811be3874461bf8adbfea0Zonr Chang * distributed under the License is distributed on an "AS IS" BASIS, 12c383a500aa59423264811be3874461bf8adbfea0Zonr Chang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c383a500aa59423264811be3874461bf8adbfea0Zonr Chang * See the License for the specific language governing permissions and 14c383a500aa59423264811be3874461bf8adbfea0Zonr Chang * limitations under the License. 15c383a500aa59423264811be3874461bf8adbfea0Zonr Chang */ 16c383a500aa59423264811be3874461bf8adbfea0Zonr Chang 17e639eb5caa2c386b4a60659a4929e8a6141a2cbeStephen Hines#ifndef _FRAMEWORKS_COMPILE_SLANG_SLANG_RS_EXPORT_ELEMENT_H_ // NOLINT 18e639eb5caa2c386b4a60659a4929e8a6141a2cbeStephen Hines#define _FRAMEWORKS_COMPILE_SLANG_SLANG_RS_EXPORT_ELEMENT_H_ 19462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 206315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonr#include <string> 21462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 22e639eb5caa2c386b4a60659a4929e8a6141a2cbeStephen Hines#include "clang/Lex/Token.h" 23e639eb5caa2c386b4a60659a4929e8a6141a2cbeStephen Hines 246315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonr#include "llvm/ADT/StringMap.h" 256315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonr#include "llvm/ADT/StringRef.h" 26462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 276315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonr#include "slang_rs_export_type.h" 28462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 299ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liaonamespace clang { 306315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonr class Type; 316315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonr class DeclaratorDecl; 329ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao} // namespace clang 33462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 34462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liaonamespace slang { 35462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 366315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonr class RSContext; 376315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonr class RSExportType; 38462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 39462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liaoclass RSExportElement { 409ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao // This is a utility class for handling the RS_ELEMENT_ADD* marker 419ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao RSExportElement() { return; } 42462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 439ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao typedef struct { 449ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao RSExportPrimitiveType::DataType type; 459ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao bool normalized; 466e6578a360497f78a181e63d7783422a9c9bfb15Stephen Hines unsigned vsize; 479ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao } ElementInfo; 48462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 499ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao typedef llvm::StringMap<const ElementInfo*> ElementInfoMapTy; 50462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 519ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao private: 529ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao // Macro name <-> ElementInfo 539ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao static ElementInfoMapTy ElementInfoMap; 54462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 559ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao static bool Initialized; 56462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 579ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao static RSExportType *Create(RSContext *Context, 586315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonr const clang::Type *T, 599ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao const ElementInfo *EI); 60462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 619ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao static const ElementInfo *GetElementInfo(const llvm::StringRef &Name); 62ecddee364d731c09c77b4c3fa647fa4f50e26756Stephen Hines 639ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao public: 649ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao static void Init(); 65462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 666315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonr static RSExportType *CreateFromDecl(RSContext *Context, 676315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonr const clang::DeclaratorDecl *DD); 68462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao}; 69462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 709ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao} // namespace slang 71462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 72e639eb5caa2c386b4a60659a4929e8a6141a2cbeStephen Hines#endif // _FRAMEWORKS_COMPILE_SLANG_SLANG_RS_EXPORT_ELEMENT_H_ NOLINT 73