11b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams/* 21b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams * Copyright 2012, The Android Open Source Project 31b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams * 41b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 51b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams * you may not use this file except in compliance with the License. 61b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams * You may obtain a copy of the License at 71b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams * 81b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams * http://www.apache.org/licenses/LICENSE-2.0 91b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams * 101b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams * Unless required by applicable law or agreed to in writing, software 111b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams * distributed under the License is distributed on an "AS IS" BASIS, 121b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 131b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams * See the License for the specific language governing permissions and 141b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams * limitations under the License. 151b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams */ 161b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams 171b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams#ifndef _FRAMEWORKS_COMPILE_SLANG_SLANG_RS_REFLECTION_BASE_H_ // NOLINT 181b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams#define _FRAMEWORKS_COMPILE_SLANG_SLANG_RS_REFLECTION_BASE_H_ 191b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams 201b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams#include <fstream> 211b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams#include <iostream> 221b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams#include <map> 231b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams#include <set> 241b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams#include <string> 251b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams#include <vector> 261b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams 271b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams#include "llvm/ADT/StringExtras.h" 281b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams 291b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams#include "slang_assert.h" 301b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams#include "slang_rs_export_type.h" 311b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams 321b6a0883cd6984e11e59b0c847fb334df1f41afcJason Samsnamespace slang { 331b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams class RSContext; 341b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams class RSExportVar; 351b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams class RSExportFunc; 361b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams class RSExportForEach; 371b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams 381b6a0883cd6984e11e59b0c847fb334df1f41afcJason Samsclass RSReflectionBase { 391b6a0883cd6984e11e59b0c847fb334df1f41afcJason Samsprotected: 401b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams const RSContext *mRSContext; 411b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams 42003ac666e57669d4312b5792068c3db302ee7b84Stephen Hines // Generated RS Elements for type-checking code. 43003ac666e57669d4312b5792068c3db302ee7b84Stephen Hines std::set<std::string> mTypesToCheck; 441b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams 451b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams RSReflectionBase(const RSContext *); 461b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams 471b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams 481b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams bool mVerbose; 491b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams 501b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams std::string mLicenseNote; 511b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams std::string mInputFileName; 521b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams 531b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams std::string mClassName; 541b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams std::string mOutputPath; 551b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams std::string mOutputBCFileName; 561b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams 571b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams std::vector< std::string > mText; 581b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams std::string mIndent; 591b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams 601b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams bool openFile(const std::string &name, std::string &errorMsg); 611b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams void startFile(const std::string &filename); 621b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams void incIndent(); 631b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams void decIndent(); 641b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams void write(const std::string &t); 65192392fc5ffedc06eb8ae2b89d703b3c658fddd6Jason Sams void write(const std::stringstream &t); 661b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams 671b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams std::string stripRS(const std::string &s) const; 681b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams 69b2fbbb91bd9d86e2dd56b2d102752e8c51aaafdfTim Murray bool writeFile(const std::string &filename, const std::vector< std::string > &txt); 701b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams 71003ac666e57669d4312b5792068c3db302ee7b84Stephen Hines bool addTypeNameForElement(const std::string &TypeName); 721b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams 7380706836b18127b5733d790613a5d1b9f97cbb1dStephen Hines static const char *getVectorAccessor(unsigned index); 7480706836b18127b5733d790613a5d1b9f97cbb1dStephen Hines 751b6a0883cd6984e11e59b0c847fb334df1f41afcJason Samsprivate: 761b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams 771b6a0883cd6984e11e59b0c847fb334df1f41afcJason Samspublic: 787dd6da2077ad17ea59f4239f5275074bf5642859Stephen Hines typedef std::vector<std::pair<std::string, std::string> > ArgTy; 797dd6da2077ad17ea59f4239f5275074bf5642859Stephen Hines 801b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams virtual ~RSReflectionBase(); 811b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams 82192392fc5ffedc06eb8ae2b89d703b3c658fddd6Jason Sams static std::string genInitValue(const clang::APValue &Val, bool asBool=false); 831b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams 841b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams}; // class RSReflection 851b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams 861b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams} // namespace slang 871b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams 881b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams#endif // _FRAMEWORKS_COMPILE_SLANG_SLANG_RS_REFLECTION_BASE_H_ NOLINT 89