13 m_current_slot_timepoints(0),
14 m_current_slot_no(-1),
15 m_last_completed_slot(-1),
41 catch (std::runtime_error& e)
43 std::cerr <<
"SegmentationImpl exception while trying to load model " << fn <<
":" << std::endl
52 SegmentationClassifier::set_dicts(SegmentationClassifier::get_dicts());
54 4, threads * 2 + 2, buffer_size_per_thread, threads);
55 m_char_len.resize(SegmentationClassifier::size());
65 bool just_started =
true;
66 bool continue_reading =
true;
82 int32_t bytes_read = 0;
88 counter += bytes_read;
93 buff.
m_len = bytes_read;
100 if (!just_started && 0 == n)
114 uint32_t lookbehind = 0;
118 if ((lookbehind =
m_input_encoder.parse_start(p, &pos, bytes_read)) > 0)
120 assert(lookbehind <= 6);
125 while (pos < bytes_read)
134 just_started =
false;
135 }
while (continue_reading);
137 char final_spaces[] =
" ";
147 throw std::runtime_error(
"Something wrong.");
201 if (0 == max ||
nullptr == pch)
207 assert(
nullptr != pch);
212 if (
nullptr == buff_end)
216 if ((uint8_t*)pch >= buff_end)
258 while (lock_count > 1)
284 while (lock_count > 1)
334 m_char_len.resize(SegmentationClassifier::size());
int32_t next_slot(uint32_t idx)
uint64_t get_slot_end(uint32_t idx) const
virtual void init(uint32_t max_feat, uint32_t overlap, uint32_t num_slots, uint32_t slot_len, uint32_t num_threads, bool precomputed_input=false)
void load(const std::string &fn)
void increment_timepoint(uint64_t &timepoint)
uint8_t get_lock_count(uint32_t idx) const
uint32_t get_slot_size() const
void set_slot_end(uint32_t idx, uint64_t slot_end)
void increment_lock_count(uint32_t idx, uint8_t v=1)
void decrement_lock_count(uint32_t idx)
int32_t get_slot_idx(uint64_t timepoint) const
uint64_t get_slot_begin(uint32_t idx) const
void start_job(uint32_t idx, bool no_more_data=false)
void wait_for_slot(uint32_t idx)
uint64_t get_start_timepoint() const
virtual void reset()
Need to be called to be able to reuse this classifier on several sequences.
size_t get_num_threads() const
std::function< bool(uint8_t *buffer, int32_t &read, int32_t max) > read_callback_t
void init(const std::vector< ngram_descr_t > &ngram_descr)
bool ready_to_generate() const
uint8_t get_lookahead() const
uint64_t get_feat(size_t idx) const
uint8_t warmup(const uint8_t *str, int32_t *pos, int32_t len)
uint64_t decode(const char **pch, uint32_t max, uint64_t from, uint64_t to)
void register_handler(const segmentation_callback_t fn)
std::vector< uint8_t > m_char_len
locked_buffer_set_t m_buff_set
void send_results(int32_t slot_idx)
InputEncoder m_input_encoder
virtual void parse_from_stream(const read_callback_t fn) override
void vectorize_timepoint(uint64_t timepoint)
virtual void register_handler(const segmentation_callback_t fn) override
uint32_t m_current_slot_timepoints
virtual void finalize() override
Cleanup all remaining locks if any.
int32_t m_current_slot_no
void increment_timepoint(uint64_t &timepoint)
void init(size_t threads, size_t buffer_size_per_thread)
virtual void load(const std::string &fn)
uint64_t m_current_timepoint
int32_t m_last_completed_slot
std::function< void(const std::vector< token_pos > &tokens, uint32_t len) > segmentation_callback_t
void init(size_t n, uint32_t buffer_size)
uint32_t bytes_available(size_t n)
size_t next(size_t n) const
locked_buffer_t & get(size_t n)
uint32_t max_buff_size() const
locketd_buffer_t is the character-level buffer shared between the source file reader and the tokenize...
const char * m_char_aligned_data
void set_read_start(const char *new_start)