move string functions to labeling, inline common routines

This commit is contained in:
scawful
2024-08-06 17:26:53 -04:00
parent 3a57264b67
commit c674bbe831
4 changed files with 47 additions and 46 deletions

View File

@@ -52,32 +52,17 @@ uint64_t decode(const std::vector<uint8_t> &input, size_t &offset) {
std::shared_ptr<ExperimentFlags::Flags> ExperimentFlags::flags_; std::shared_ptr<ExperimentFlags::Flags> ExperimentFlags::flags_;
std::string UppercaseHexByte(uint8_t byte, bool leading) { constexpr uint32_t kFastRomRegion = 0x808000;
if (leading) {
std::string result = absl::StrFormat("0x%02X", byte);
return result;
}
std::string result = absl::StrFormat("%02X", byte);
return result;
}
std::string UppercaseHexWord(uint16_t word) {
std::string result = absl::StrFormat("0x%04X", word);
return result;
}
std::string UppercaseHexLong(uint32_t dword) {
std::string result = absl::StrFormat("0x%06X", dword);
return result;
}
uint32_t SnesToPc(uint32_t addr) { inline uint32_t SnesToPc(uint32_t addr) noexcept {
if (addr >= 0x808000) { if (addr >= kFastRomRegion) {
addr -= 0x808000; addr -= kFastRomRegion;
} }
uint32_t temp = (addr & 0x7FFF) + ((addr / 2) & 0xFF8000); uint32_t temp = (addr & 0x7FFF) + ((addr / 2) & 0xFF8000);
return (temp + 0x0); return (temp + 0x0);
} }
uint32_t PcToSnes(uint32_t addr) { inline uint32_t PcToSnes(uint32_t addr) {
uint8_t *b = reinterpret_cast<uint8_t *>(&addr); uint8_t *b = reinterpret_cast<uint8_t *>(&addr);
b[2] = static_cast<uint8_t>(b[2] * 2); b[2] = static_cast<uint8_t>(b[2] * 2);
@@ -96,8 +81,8 @@ uint32_t MapBankToWordAddress(uint8_t bank, uint16_t addr) {
return result; return result;
} }
int AddressFromBytes(uint8_t addr1, uint8_t addr2, uint8_t addr3) { int AddressFromBytes(uint8_t bank, uint8_t high, uint8_t low) noexcept {
return (addr1 << 16) | (addr2 << 8) | addr3; return (bank << 16) | (high << 8) | low;
} }
// hextodec has been imported from SNESDisasm to parse hex numbers // hextodec has been imported from SNESDisasm to parse hex numbers
@@ -130,15 +115,6 @@ int HexToDec(char *input, int length) {
return result; return result;
} }
bool StringReplace(std::string &str, const std::string &from,
const std::string &to) {
size_t start = str.find(from);
if (start == std::string::npos) return false;
str.replace(start, from.length(), to);
return true;
}
void stle(uint8_t *const p_arr, size_t const p_index, unsigned const p_val) { void stle(uint8_t *const p_arr, size_t const p_index, unsigned const p_val) {
uint8_t v = (p_val >> (8 * p_index)) & 0xff; uint8_t v = (p_val >> (8 * p_index)) & 0xff;

View File

@@ -194,21 +194,16 @@ class Logger {
static std::vector<std::string> logs; static std::vector<std::string> logs;
}; };
std::string UppercaseHexByte(uint8_t byte, bool leading = false); inline uint32_t SnesToPc(uint32_t addr) noexcept;
std::string UppercaseHexWord(uint16_t word);
std::string UppercaseHexLong(uint32_t dword);
uint32_t SnesToPc(uint32_t addr); inline uint32_t PcToSnes(uint32_t addr);
uint32_t PcToSnes(uint32_t addr);
uint32_t MapBankToWordAddress(uint8_t bank, uint16_t addr); inline uint32_t MapBankToWordAddress(uint8_t bank, uint16_t addr);
inline int AddressFromBytes(uint8_t bank, uint8_t high, uint8_t low) noexcept;
int AddressFromBytes(uint8_t addr1, uint8_t addr2, uint8_t addr3);
int HexToDec(char *input, int length); int HexToDec(char *input, int length);
bool StringReplace(std::string &str, const std::string &from,
const std::string &to);
void stle16b_i(uint8_t *const p_arr, size_t const p_index, void stle16b_i(uint8_t *const p_arr, size_t const p_index,
uint16_t const p_val); uint16_t const p_val);
uint16_t ldle16b_i(uint8_t const *const p_arr, size_t const p_index); uint16_t ldle16b_i(uint8_t const *const p_arr, size_t const p_index);

View File

@@ -1,8 +1,5 @@
#include "app/core/labeling.h" #include "app/core/labeling.h"
#include "imgui/imgui.h"
#include "imgui/misc/cpp/imgui_stdlib.h"
#include <cstdint> #include <cstdint>
#include <fstream> #include <fstream>
#include <sstream> #include <sstream>
@@ -13,11 +10,39 @@
#include "app/core/common.h" #include "app/core/common.h"
#include "app/core/constants.h" #include "app/core/constants.h"
#include "app/gui/icons.h" #include "app/gui/icons.h"
#include "imgui/imgui.h"
#include "imgui/misc/cpp/imgui_stdlib.h"
namespace yaze { namespace yaze {
namespace app { namespace app {
namespace core { namespace core {
std::string UppercaseHexByte(uint8_t byte, bool leading) {
if (leading) {
std::string result = absl::StrFormat("0x%02X", byte);
return result;
}
std::string result = absl::StrFormat("%02X", byte);
return result;
}
std::string UppercaseHexWord(uint16_t word) {
std::string result = absl::StrFormat("0x%04X", word);
return result;
}
std::string UppercaseHexLong(uint32_t dword) {
std::string result = absl::StrFormat("0x%06X", dword);
return result;
}
bool StringReplace(std::string& str, const std::string& from,
const std::string& to) {
size_t start = str.find(from);
if (start == std::string::npos) return false;
str.replace(start, from.length(), to);
return true;
}
bool ResourceLabelManager::LoadLabels(const std::string& filename) { bool ResourceLabelManager::LoadLabels(const std::string& filename) {
std::ifstream file(filename); std::ifstream file(filename);
if (!file.is_open()) { if (!file.is_open()) {

View File

@@ -17,6 +17,13 @@ namespace yaze {
namespace app { namespace app {
namespace core { namespace core {
std::string UppercaseHexByte(uint8_t byte, bool leading = false);
std::string UppercaseHexWord(uint16_t word);
std::string UppercaseHexLong(uint32_t dword);
bool StringReplace(std::string& str, const std::string& from,
const std::string& to);
// Default types // Default types
static constexpr absl::string_view kDefaultTypes[] = { static constexpr absl::string_view kDefaultTypes[] = {
"Dungeon Names", "Dungeon Room Names", "Overworld Map Names"}; "Dungeon Names", "Dungeon Room Names", "Overworld Map Names"};
@@ -32,8 +39,6 @@ struct ResourceLabelManager {
const std::string& defaultValue); const std::string& defaultValue);
std::string CreateOrGetLabel(const std::string& type, const std::string& key, std::string CreateOrGetLabel(const std::string& type, const std::string& key,
const std::string& defaultValue); const std::string& defaultValue);
std::string CreateOrGetLabel(const std::string& type, const std::string& key,
const absl::string_view& defaultValue);
bool labels_loaded_ = false; bool labels_loaded_ = false;
std::string filename_; std::string filename_;