12 #ifdef MODEL_PARSER_DEBUG 30 int read(
const char* field_name,
size_t field_length,
const char** ret);
32 int skip(
size_t bytes);
38 template <
bool compute_checksum>
42 RETURN_ON_FAIL((read<uint32_t, compute_checksum>(
"string.len", str_len)));
43 #ifdef MODEL_PARSER_DEBUG 45 std::fstream log(
"vwslim-debug.log", std::fstream::app);
46 log << std::setw(18) << field_name <<
" length " << str_len << std::endl;
57 s = std::string(data, str_len - 1);
58 #ifdef MODEL_PARSER_DEBUG 60 std::fstream log(
"vwslim-debug.log", std::fstream::app);
61 log << std::setw(18) << field_name <<
" '" << s <<
'\'' << std::endl;
66 if (compute_checksum && str_len > 0)
67 _checksum = (uint32_t)
uniform_hash(data, str_len, _checksum);
72 template <
typename T,
bool compute_checksum>
73 int read(
const char* field_name, T& val)
75 #ifdef MODEL_PARSER_DEBUG 76 std::fstream log(
"vwslim-debug.log", std::fstream::app);
77 log << std::setw(18) << field_name <<
" 0x" << std::hex << std::setw(8) << (uint64_t)_model <<
"-" << std::hex
78 << std::setw(8) << (uint64_t)_model_end <<
" " << std::setw(4) << (_model -
_model_begin)
79 <<
" field: " << std::setw(8) << (uint64_t)&val << std::dec;
86 memcpy(&val, data,
sizeof(T));
91 #ifdef MODEL_PARSER_DEBUG 92 log <<
" '" << val <<
'\'' << std::endl;
100 int read(
const char* field_name, T& val)
102 return read<T, true>(field_name, val);
105 template <
typename T,
typename W>
109 while (_model < _model_end)
113 if (idx > weight_length)
116 float& w = (*weights)[idx];
119 #ifdef MODEL_PARSER_DEBUG 120 std::cout <<
"weight. idx: " << idx <<
":" << (*weights)[idx] << std::endl;
127 template <
typename W>
130 uint64_t weight_length = (uint64_t)1 << num_bits;
132 weights = std::unique_ptr<W>(
new W(weight_length));
133 weights->stride_shift(stride_shift);
137 RETURN_ON_FAIL((read_weights<uint32_t, W>(weights, weight_length)));
141 RETURN_ON_FAIL((read_weights<uint64_t, W>(weights, weight_length)));
#define RETURN_ON_FAIL(stmt)
int read_weights(std::unique_ptr< W > &weights, uint64_t weight_length)
uint64_t stride_shift(const stagewise_poly &poly, uint64_t idx)
VW_STD14_CONSTEXPR uint64_t uniform_hash(const void *key, size_t len, uint64_t seed)
const char * _model_begin
int read(const char *field_name, size_t field_length, const char **ret)
#define E_VW_PREDICT_ERR_INVALID_MODEL
int read(const char *field_name, T &val)
model_parser(const char *model, size_t length)
int read(const char *field_name, T &val)
int read_weights(std::unique_ptr< W > &weights, uint32_t num_bits, uint32_t stride_shift)
int read_string(const char *field_name, std::string &s)
#define E_VW_PREDICT_ERR_WEIGHT_INDEX_OUT_OF_RANGE