| //===------------------- UTF8.h - Utilities for UTF8 ----------------------===// |
| // |
| // The VMKit project |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #ifndef _JNJVM_UTF8_H_ |
| #define _JNJVM_UTF8_H_ |
| |
| #include "types.h" |
| |
| #include "vmkit/UTF8.h" |
| |
| namespace j3 { |
| using vmkit::UTF8; |
| using vmkit::UTF8Map; |
| |
| /// UTF8Buffer - Helper class to create char* buffers suitable for |
| /// printf. |
| /// |
| class UTF8Buffer { |
| public: |
| char* contents; |
| |
| /// UTF8Buffer - Create a buffer with the following UTF8. |
| UTF8Buffer(const UTF8* val) { |
| contents = new char[val->size + 1]; |
| for (int i = 0; i < val->size; i++) { |
| contents[i] = (char)val->elements[i]; |
| } |
| contents[val->size] = 0; |
| } |
| |
| char* cString() const { |
| return contents; |
| } |
| |
| /// toCompileName - Change the utf8 following JNI conventions. |
| /// |
| UTF8Buffer* toCompileName(const char* suffix = "") { |
| const char *buffer = contents; |
| uint32 len = strlen(buffer); |
| uint32 suffixLen = strlen(suffix); |
| char* newBuffer = new char[(len << 3) + suffixLen + 1]; |
| uint32 j = 0; |
| for (uint32 i = 0; i < len; ++i) { |
| if (buffer[i] == '/') { |
| newBuffer[j++] = '_'; |
| } else if (buffer[i] == '_') { |
| newBuffer[j++] = '_'; |
| newBuffer[j++] = '1'; |
| } else if (buffer[i] == ';') { |
| newBuffer[j++] = '_'; |
| newBuffer[j++] = '2'; |
| } else if (buffer[i] == '[') { |
| newBuffer[j++] = '_'; |
| newBuffer[j++] = '3'; |
| } else if (buffer[i] == '$') { |
| newBuffer[j++] = '_'; |
| newBuffer[j++] = '0'; |
| newBuffer[j++] = '0'; |
| newBuffer[j++] = '0'; |
| newBuffer[j++] = '2'; |
| newBuffer[j++] = '4'; |
| } else { |
| newBuffer[j++] = buffer[i]; |
| } |
| } |
| for (uint32 i = 0; i < suffixLen; i++) { |
| newBuffer[j++] = suffix[i]; |
| } |
| newBuffer[j] = 0; |
| delete[] contents; |
| contents = newBuffer; |
| return this; |
| } |
| |
| ~UTF8Buffer() { |
| delete[] contents; |
| } |
| }; |
| |
| } |
| |
| #endif |