| /* |
| * 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 |