Compare commits

...

3 Commits

Author SHA1 Message Date
BodgeMaster 45538e156a lib/java_string: replace std::vector with std::string 2022-07-20 04:23:06 +02:00
BodgeMaster 34e30c0bd4 test/java_string: replace tabs with spaces, fix how tiny_utf8::string is being instantiated 2022-07-20 04:02:44 +02:00
BodgeMaster e184acde00 lib/java_string: rename functions
JavaCompat::importJavaFormatToString() → JavaCompat::importJavaString()
JavaCompat::exportStringToJavaFormat() → JavaCompat::exportJavaString()
2022-07-20 04:00:17 +02:00
3 changed files with 57 additions and 41 deletions

View File

@ -14,30 +14,31 @@
//If not, see https://www.gnu.org/licenses/agpl-3.0.en.html //If not, see https://www.gnu.org/licenses/agpl-3.0.en.html
#include <tinyutf8/tinyutf8.h> #include <tinyutf8/tinyutf8.h>
#include <vector> #include <string>
#include "error.h++" #include "error.h++"
#include "java_string.h++" #include "java_string.h++"
namespace JavaCompat { namespace JavaCompat {
tiny_utf8::string importJavaFormatToString(uint8_t data[]) { //FIXME: contrary to what I said, we need to explicitly pass the data
std::vector<uint8_t> output; // size because files could have been tampered with or corrupted
tiny_utf8::string outputString; tiny_utf8::string importJavaString(uint8_t data[]) {
std::string stdString;
uint16_t size = static_cast<uint16_t>(data[0])<<8 | static_cast<uint16_t>(data[1]); uint16_t size = static_cast<uint16_t>(data[0])<<8 | static_cast<uint16_t>(data[1]);
for(uint8_t i=2; i<size; i++){ for(uint8_t i=2; i<size; i++){
if(i != 0){ if(i != 0){
if(data[i] == 0x80 && data[i-1] == 0xc0){ if(data[i] == 0x80 && data[i-1] == 0xc0){
output[output.size() - 1] = 0x00; stdString[stdString.length() - 1] = '\0';
continue; continue;
} }
} }
output.push_back(data[i]); stdString.push_back((char) data[i]);
} }
return tiny_utf8::string(output.begin(), output.end()); return tiny_utf8::string(stdString);
} }
/* /*
ErrorOr<uint8_t*> exportStringToJavaFormat(tiny_utf8::string data) { ErrorOr<uint8_t*> exportJavaString(tiny_utf8::string data) {
return ErrorOr(nullptr); return ErrorOr(nullptr);
} }
*/ */

View File

@ -17,6 +17,8 @@
#include "error.h++" #include "error.h++"
namespace JavaCompat { namespace JavaCompat {
tiny_utf8::string importJavaFormatToString(uint8_t data[]); //FIXME: contrary to what I said, we need to explicitly pass the data
ErrorOr<uint8_t*> exportStringToJavaFormat(tiny_utf8::string data); // size because files could have been tampered with or corrupted
tiny_utf8::string importJavaString(uint8_t data[]);
ErrorOr<uint8_t*> exportJavaString(tiny_utf8::string data);
} }

View File

@ -23,48 +23,61 @@
int main(){ int main(){
// metadata for things in resources/unicode_data/
// normal_utf-8: 116 bytes, 85 characters ??
// java-style_unicode: 119 bytes, 85 characters ??
std::cout << "################################################################################" << std::endl; std::cout << "################################################################################" << std::endl;
std::cout << "Java String Tests" << std::endl; std::cout << "Java String Tests" << std::endl;
std::cout << "################################################################################" << std::endl; std::cout << "################################################################################" << std::endl;
std::streampos javaSize; char* nextChar = new char;
char* javaData;
std::ifstream javaFile("./resources/unicode_data/java-style_unicode", std::ios::in | std::ios::binary | std::ios::ate);
if(javaFile.is_open()){
javaSize = javaFile.tellg();
javaData = new char[javaSize];
javaFile.seekg(0, std::ios::beg);
javaFile.read(javaData, javaSize);
javaFile.close();
}
tiny_utf8::string importString = JavaCompat::importJavaFormatToString((uint8_t*) javaData); std::streampos javaSize;
std::string javaStdString;
const char* javaFilePath = "./resources/unicode_data/java-style_unicode";
std::ifstream javaFile(javaFilePath, std::ios::in | std::ios::binary | std::ios::ate);
if(javaFile.is_open()){
javaSize = javaFile.tellg();
javaFile.seekg(0, std::ios::beg);
std::streampos normalSize; for (int i=0; i<javaSize; i++) {
char* normalData; javaFile.read(nextChar, 1);
std::ifstream normalFile("./resources/unicode_data/normal_utf-8", std::ios::in | std::ios::binary | std::ios::ate); javaStdString.push_back(*nextChar);
if(normalFile.is_open()){ }
normalSize = normalFile.tellg();
normalData = new char[normalSize];
normalFile.seekg(0, std::ios::beg);
normalFile.read(normalData, normalSize);
normalFile.close();
}
std::vector<char> normalDataVector = std::vector<char>(); javaFile.close();
for(int i=0; i<normalSize; i++){ } else {
normalDataVector.push_back(normalData[i]); std::cerr << "Failed to open file: " << javaFilePath << std::endl;
return 2;
} }
tiny_utf8::string normalString = tiny_utf8::string(normalDataVector.begin(), normalDataVector.end()); tiny_utf8::string importedString = JavaCompat::importJavaString(reinterpret_cast<uint8_t*>(javaStdString.data()));
std::cout << normalString.size() << std::endl; std::streampos normalSize;
std::cout << importString.size() << std::endl; std::string normalStdString;
const char* normalFilePath = "./resources/unicode_data/normal_utf-8";
std::ifstream normalFile(normalFilePath, std::ios::in | std::ios::binary | std::ios::ate);
if(normalFile.is_open()){
normalSize = normalFile.tellg();
normalFile.seekg(0, std::ios::beg);
ASSERT(normalString == importString); for (int i=0; i<normalSize; i++) {
normalFile.read(nextChar, 1);
normalStdString.push_back(*nextChar);
}
normalFile.close();
} else {
std::cerr << "Failed to open file: " << normalFilePath << std::endl;
return 2;
}
tiny_utf8::string normalString = tiny_utf8::string(normalStdString);
ASSERT(normalString == importedString);
std::cout << "Passed Import Java string test." << std::endl; std::cout << "Passed Import Java string test." << std::endl;
return 0;
}
return 0;
}