/* * Copyright 2010, The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef _FRAMEWORKS_COMPILE_SLANG_SLANG_REFLECT_UTILS_H_ // NOLINT #define _FRAMEWORKS_COMPILE_SLANG_SLANG_REFLECT_UTILS_H_ #include <string> namespace slang { // BitCode storage type enum BitCodeStorageType { BCST_APK_RESOURCE, BCST_JAVA_CODE, BCST_CPP_CODE }; class RSSlangReflectUtils { public: // Encode a binary bitcode file into a Java source file. // rsFileName: the original .rs file name (with or without path). // bcFileName: where is the bit code file // reflectPath: where to output the generated Java file, no package name in // it. // packageName: the package of the output Java file. struct BitCodeAccessorContext { const char *rsFileName; const char *bcFileName; const char *reflectPath; const char *packageName; BitCodeStorageType bcStorage; }; // Return the stem of the file name, i.e., remove the dir and the extension. // Eg, foo.ext -> foo // foo.bar.ext -> foo.bar // ./path/foo.ext -> foo static std::string GetFileNameStem(const char* fileName); // Compuate a Java source file path from a given prefixPath and its package. // Eg, given prefixPath=./foo/bar and packageName=com.x.y, then it returns // ./foo/bar/com/x/y static std::string ComputePackagedPath(const char *prefixPath, const char *packageName); // Compute Java class name from a .rs file name. // Any non-alnum, non-underscore characters will be discarded. // E.g. with rsFileName=./foo/bar/my-Renderscript_file.rs it returns // "myRenderscript_file". // rsFileName: the input .rs file name (with or without path). static std::string JavaClassNameFromRSFileName(const char *rsFileName); // Compute a bitcode file name (no extension) from a .rs file name. // Because the bitcode file name may be used as Resource ID in the generated // class (something like R.raw.<bitcode_filename>), Any non-alnum, // non-underscore character will be discarded. // The difference from JavaClassNameFromRSFileName() is that the result is // converted to lowercase. // E.g. with rsFileName=./foo/bar/my-Renderscript_file.rs it returns // "myrenderscript_file" // rsFileName: the input .rs file name (with or without path). static std::string BCFileNameFromRSFileName(const char *rsFileName); // Generate the bit code accessor Java source file. static bool GenerateBitCodeAccessor(const BitCodeAccessorContext &context); }; } // namespace slang #endif // _FRAMEWORKS_COMPILE_SLANG_SLANG_REFLECT_UTILS_H_ NOLINT