lots of improvements standby for the results
This commit is contained in:
@@ -0,0 +1,85 @@
|
||||
#pragma once
|
||||
|
||||
#include <cstdint>
|
||||
#include <string_view>
|
||||
|
||||
namespace xicu {
|
||||
|
||||
class PropTable {
|
||||
public:
|
||||
PropTable() = default;
|
||||
explicit PropTable(const char* path);
|
||||
~PropTable();
|
||||
|
||||
PropTable(const PropTable&) = delete;
|
||||
PropTable& operator=(const PropTable&) = delete;
|
||||
PropTable(PropTable&& other) noexcept;
|
||||
PropTable& operator=(PropTable&& other) noexcept;
|
||||
|
||||
bool load(const char* path);
|
||||
bool isLoaded() const { return data_ != nullptr; }
|
||||
std::string_view getName(uint32_t cp) const;
|
||||
bool getPunctuation(uint32_t cp) const;
|
||||
bool getLetter(uint32_t cp) const;
|
||||
int32_t getUppercase_map(uint32_t cp) const;
|
||||
int32_t getLowercase_map(uint32_t cp) const;
|
||||
bool getWhitespace(uint32_t cp) const;
|
||||
bool getSpace(uint32_t cp) const;
|
||||
bool getDecimal(uint32_t cp) const;
|
||||
int32_t getDecimal_val(uint32_t cp) const;
|
||||
|
||||
private:
|
||||
const uint8_t* data_ = nullptr;
|
||||
size_t data_size_ = 0;
|
||||
bool owns_data_ = false;
|
||||
|
||||
static uint32_t readVarint(const uint8_t*& ptr);
|
||||
const uint8_t* findFieldData(const char* name, uint8_t& out_type, uint8_t& out_strat) const;
|
||||
const uint8_t* findStringField(const char* name) const;
|
||||
|
||||
// Decoders
|
||||
bool decodeBitmap(const uint8_t* data, uint32_t cp) const;
|
||||
bool decodeDeltaRangesBool(const uint8_t* data, const uint8_t* data_end, uint32_t cp) const;
|
||||
int32_t decodeDeltaRangesInt(const uint8_t* data, const uint8_t* data_end, uint32_t cp) const;
|
||||
bool decodeSparseMapBool(const uint8_t* data, const uint8_t* data_end, uint32_t cp) const;
|
||||
int32_t decodeSparseMapInt(const uint8_t* data, const uint8_t* data_end, uint32_t cp) const;
|
||||
};
|
||||
|
||||
inline std::string_view getName(uint32_t cp) {
|
||||
static PropTable table("../out/xicu.bin");
|
||||
return table.getName(cp);
|
||||
}
|
||||
inline bool isPunctuation(uint32_t cp) {
|
||||
static PropTable table("../out/xicu.bin");
|
||||
return table.getPunctuation(cp);
|
||||
}
|
||||
inline bool isLetter(uint32_t cp) {
|
||||
static PropTable table("../out/xicu.bin");
|
||||
return table.getLetter(cp);
|
||||
}
|
||||
inline int32_t getUppercase_map(uint32_t cp) {
|
||||
static PropTable table("../out/xicu.bin");
|
||||
return table.getUppercase_map(cp);
|
||||
}
|
||||
inline int32_t getLowercase_map(uint32_t cp) {
|
||||
static PropTable table("../out/xicu.bin");
|
||||
return table.getLowercase_map(cp);
|
||||
}
|
||||
inline bool isWhitespace(uint32_t cp) {
|
||||
static PropTable table("../out/xicu.bin");
|
||||
return table.getWhitespace(cp);
|
||||
}
|
||||
inline bool isSpace(uint32_t cp) {
|
||||
static PropTable table("../out/xicu.bin");
|
||||
return table.getSpace(cp);
|
||||
}
|
||||
inline bool isDecimal(uint32_t cp) {
|
||||
static PropTable table("../out/xicu.bin");
|
||||
return table.getDecimal(cp);
|
||||
}
|
||||
inline int32_t getDecimal_val(uint32_t cp) {
|
||||
static PropTable table("../out/xicu.bin");
|
||||
return table.getDecimal_val(cp);
|
||||
}
|
||||
|
||||
} // namespace xicu
|
||||
Reference in New Issue
Block a user