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
421b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams
431b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams
441b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams    RSReflectionBase(const RSContext *);
451b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams
461b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams
471b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams    bool mVerbose;
481b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams
491b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams    std::string mLicenseNote;
501b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams    std::string mInputFileName;
511b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams
521b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams    std::string mClassName;
531b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams    std::string mOutputPath;
541b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams    std::string mOutputBCFileName;
551b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams
561b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams    std::vector< std::string > mText;
571b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams    std::string mIndent;
581b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams
591b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams    bool openFile(const std::string &name, std::string &errorMsg);
601b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams    void startFile(const std::string &filename);
611b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams    void incIndent();
621b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams    void decIndent();
631b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams    void write(const std::string &t);
64192392fc5ffedc06eb8ae2b89d703b3c658fddd6Jason Sams    void write(const std::stringstream &t);
651b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams
661b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams    std::string stripRS(const std::string &s) const;
671b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams
681b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams    static bool writeFile(const std::string &filename, const std::vector< std::string > &txt);
691b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams
701b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams
711b6a0883cd6984e11e59b0c847fb334df1f41afcJason Samsprivate:
721b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams
731b6a0883cd6984e11e59b0c847fb334df1f41afcJason Samspublic:
741b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams    virtual ~RSReflectionBase();
751b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams
76192392fc5ffedc06eb8ae2b89d703b3c658fddd6Jason Sams    static std::string genInitValue(const clang::APValue &Val, bool asBool=false);
771b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams
781b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams};  // class RSReflection
791b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams
801b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams}   // namespace slang
811b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams
821b6a0883cd6984e11e59b0c847fb334df1f41afcJason Sams#endif  // _FRAMEWORKS_COMPILE_SLANG_SLANG_RS_REFLECTION_BASE_H_  NOLINT
83