Alexander Gutkin | 132a22e | 2012-10-17 15:20:00 +0100 | [diff] [blame] | 1 | diff --git a/Android.mk b/Android.mk |
| 2 | index 9da2083..9d5fc12 100644 |
| 3 | --- a/Android.mk |
| 4 | +++ b/Android.mk |
| 5 | @@ -16,11 +16,9 @@ LOCAL_PATH := $(call my-dir) |
| 6 | |
| 7 | include $(CLEAR_VARS) |
| 8 | |
| 9 | -LOCAL_C_INCLUDES += $(LOCAL_PATH)/lib/marisa |
| 10 | -LOCAL_CFLAGS += -fexceptions |
| 11 | -LOCAL_CPP_EXTENSION := .cc |
| 12 | +LOCAL_C_INCLUDES += $(LOCAL_PATH)/lib/marisa external/stlport |
| 13 | |
| 14 | -LOCAL_NDK_STL_VARIANT := gnustl_static |
| 15 | +LOCAL_CPP_EXTENSION := .cc |
| 16 | |
| 17 | LOCAL_SRC_FILES := lib/marisa/base.cc \ |
| 18 | lib/marisa/intvector.cc \ |
| 19 | @@ -36,7 +34,7 @@ LOCAL_SRC_FILES := lib/marisa/base.cc \ |
| 20 | lib/marisa/writer.cc |
| 21 | |
| 22 | LOCAL_MODULE := libmarisa-trie |
| 23 | +LOCAL_MODULE_TAGS := optional |
| 24 | |
| 25 | -LOCAL_SDK_VERSION := 14 |
| 26 | - |
| 27 | +include external/stlport/libstlport.mk |
| 28 | include $(BUILD_STATIC_LIBRARY) |
| 29 | diff --git a/lib/marisa/base.h b/lib/marisa/base.h |
| 30 | index c2b2b07..731b24a 100644 |
| 31 | --- a/lib/marisa/base.h |
| 32 | +++ b/lib/marisa/base.h |
| 33 | @@ -13,6 +13,10 @@ |
| 34 | #include <stddef.h> |
| 35 | #endif // __cplusplus |
| 36 | |
| 37 | +#if defined(__ANDROID__) |
| 38 | +#include <android/log.h> |
| 39 | +#endif // __ANDROID__ |
| 40 | + |
| 41 | #ifdef __cplusplus |
| 42 | extern "C" { |
| 43 | #endif // __cplusplus |
| 44 | @@ -183,8 +187,22 @@ class Exception { |
| 45 | }; |
| 46 | |
| 47 | // MARISA_THROW adds a filename and a line number to an exception. |
| 48 | +#if !defined(__ANDROID__) |
| 49 | #define MARISA_THROW(status) \ |
| 50 | (throw Exception(__FILE__, __LINE__, status)) |
| 51 | +#else |
| 52 | + |
| 53 | +inline int android_log_exception(int status) { |
| 54 | + char tmpbuf[100]; |
| 55 | + snprintf(tmpbuf, sizeof(tmpbuf), "marisa exception: %d", status); |
| 56 | + __android_log_write(ANDROID_LOG_ERROR, "marisa-trie", tmpbuf); |
| 57 | + return 0; |
| 58 | +} |
| 59 | + |
| 60 | +#define MARISA_THROW(status) \ |
| 61 | + (android_log_exception(status)) |
| 62 | + |
| 63 | +#endif // __ANDROID__ |
| 64 | |
| 65 | // MARISA_THROW_IF throws an exception with `status' if `cond' is true. |
| 66 | #define MARISA_THROW_IF(cond, status) \ |
| 67 | diff --git a/lib/marisa/reader.cc b/lib/marisa/reader.cc |
| 68 | index 6ecc797..df144ef 100644 |
| 69 | --- a/lib/marisa/reader.cc |
| 70 | +++ b/lib/marisa/reader.cc |
| 71 | @@ -80,11 +80,7 @@ void Reader::read_data(void *buf, std::size_t size) { |
| 72 | MARISA_THROW(MARISA_IO_ERROR); |
| 73 | } |
| 74 | } else if (stream_ != NULL) { |
| 75 | - try { |
| 76 | - if (!stream_->read(static_cast<char *>(buf), size)) { |
| 77 | - MARISA_THROW(MARISA_IO_ERROR); |
| 78 | - } |
| 79 | - } catch (const std::ios_base::failure &) { |
| 80 | + if (!stream_->read(static_cast<char *>(buf), size)) { |
| 81 | MARISA_THROW(MARISA_IO_ERROR); |
| 82 | } |
| 83 | } else { |
| 84 | diff --git a/lib/marisa/trie-build.cc b/lib/marisa/trie-build.cc |
| 85 | index 4421432..fb7f072 100644 |
| 86 | --- a/lib/marisa/trie-build.cc |
| 87 | +++ b/lib/marisa/trie-build.cc |
| 88 | @@ -63,15 +63,9 @@ void Trie::build_trie(Vector<Key<String> > &keys, |
| 89 | build_trie(keys, static_cast<UInt32 *>(NULL), flags); |
| 90 | return; |
| 91 | } |
| 92 | - try { |
| 93 | - std::vector<UInt32> temp_key_ids(keys.size()); |
| 94 | - build_trie(keys, temp_key_ids.empty() ? NULL : &temp_key_ids[0], flags); |
| 95 | - key_ids->swap(temp_key_ids); |
| 96 | - } catch (const std::bad_alloc &) { |
| 97 | - MARISA_THROW(MARISA_MEMORY_ERROR); |
| 98 | - } catch (const std::length_error &) { |
| 99 | - MARISA_THROW(MARISA_SIZE_ERROR); |
| 100 | - } |
| 101 | + std::vector<UInt32> temp_key_ids(keys.size()); |
| 102 | + build_trie(keys, temp_key_ids.empty() ? NULL : &temp_key_ids[0], flags); |
| 103 | + key_ids->swap(temp_key_ids); |
| 104 | } |
| 105 | |
| 106 | void Trie::build_trie(Vector<Key<String> > &keys, |
| 107 | @@ -168,7 +162,7 @@ void Trie::build_trie(Vector<Key<T> > &keys, |
| 108 | |
| 109 | template <typename T> |
| 110 | void Trie::build_cur(Vector<Key<T> > &keys, |
| 111 | - Vector<UInt32> *terminals, Progress &progress) try { |
| 112 | + Vector<UInt32> *terminals, Progress &progress) { |
| 113 | num_keys_ = sort_keys(keys); |
| 114 | louds_.push_back(true); |
| 115 | louds_.push_back(false); |
| 116 | @@ -261,10 +255,6 @@ void Trie::build_cur(Vector<Key<T> > &keys, |
| 117 | |
| 118 | build_terminals(keys, terminals); |
| 119 | keys.swap(&rest_keys); |
| 120 | -} catch (const std::bad_alloc &) { |
| 121 | - MARISA_THROW(MARISA_MEMORY_ERROR); |
| 122 | -} catch (const std::length_error &) { |
| 123 | - MARISA_THROW(MARISA_SIZE_ERROR); |
| 124 | } |
| 125 | |
| 126 | void Trie::build_next(Vector<Key<String> > &keys, |
| 127 | diff --git a/lib/marisa/trie-c.cc b/lib/marisa/trie-c.cc |
| 128 | index 00ebe80..9e11405 100644 |
| 129 | --- a/lib/marisa/trie-c.cc |
| 130 | +++ b/lib/marisa/trie-c.cc |
| 131 | @@ -79,106 +79,88 @@ marisa_status marisa_end(marisa_trie *h) { |
| 132 | |
| 133 | marisa_status marisa_build(marisa_trie *h, const char * const *keys, |
| 134 | size_t num_keys, const size_t *key_lengths, const double *key_weights, |
| 135 | - marisa_uint32 *key_ids, int flags) try { |
| 136 | + marisa_uint32 *key_ids, int flags) { |
| 137 | if (h == NULL) { |
| 138 | return MARISA_HANDLE_ERROR; |
| 139 | } |
| 140 | h->trie.build(keys, num_keys, key_lengths, key_weights, key_ids, flags); |
| 141 | h->mapper.clear(); |
| 142 | return MARISA_OK; |
| 143 | -} catch (const marisa::Exception &ex) { |
| 144 | - return ex.status(); |
| 145 | } |
| 146 | |
| 147 | marisa_status marisa_mmap(marisa_trie *h, const char *filename, |
| 148 | - long offset, int whence) try { |
| 149 | + long offset, int whence) { |
| 150 | if (h == NULL) { |
| 151 | return MARISA_HANDLE_ERROR; |
| 152 | } |
| 153 | h->trie.mmap(&h->mapper, filename, offset, whence); |
| 154 | return MARISA_OK; |
| 155 | -} catch (const marisa::Exception &ex) { |
| 156 | - return ex.status(); |
| 157 | } |
| 158 | |
| 159 | -marisa_status marisa_map(marisa_trie *h, const void *ptr, size_t size) try { |
| 160 | +marisa_status marisa_map(marisa_trie *h, const void *ptr, size_t size) { |
| 161 | if (h == NULL) { |
| 162 | return MARISA_HANDLE_ERROR; |
| 163 | } |
| 164 | h->trie.map(ptr, size); |
| 165 | h->mapper.clear(); |
| 166 | return MARISA_OK; |
| 167 | -} catch (const marisa::Exception &ex) { |
| 168 | - return ex.status(); |
| 169 | } |
| 170 | |
| 171 | marisa_status marisa_load(marisa_trie *h, const char *filename, |
| 172 | - long offset, int whence) try { |
| 173 | + long offset, int whence) { |
| 174 | if (h == NULL) { |
| 175 | return MARISA_HANDLE_ERROR; |
| 176 | } |
| 177 | h->trie.load(filename, offset, whence); |
| 178 | h->mapper.clear(); |
| 179 | return MARISA_OK; |
| 180 | -} catch (const marisa::Exception &ex) { |
| 181 | - return ex.status(); |
| 182 | } |
| 183 | |
| 184 | -marisa_status marisa_fread(marisa_trie *h, FILE *file) try { |
| 185 | +marisa_status marisa_fread(marisa_trie *h, FILE *file) { |
| 186 | if (h == NULL) { |
| 187 | return MARISA_HANDLE_ERROR; |
| 188 | } |
| 189 | h->trie.fread(file); |
| 190 | h->mapper.clear(); |
| 191 | return MARISA_OK; |
| 192 | -} catch (const marisa::Exception &ex) { |
| 193 | - return ex.status(); |
| 194 | } |
| 195 | |
| 196 | -marisa_status marisa_read(marisa_trie *h, int fd) try { |
| 197 | +marisa_status marisa_read(marisa_trie *h, int fd) { |
| 198 | if (h == NULL) { |
| 199 | return MARISA_HANDLE_ERROR; |
| 200 | } |
| 201 | h->trie.read(fd); |
| 202 | h->mapper.clear(); |
| 203 | return MARISA_OK; |
| 204 | -} catch (const marisa::Exception &ex) { |
| 205 | - return ex.status(); |
| 206 | } |
| 207 | |
| 208 | marisa_status marisa_save(const marisa_trie *h, const char *filename, |
| 209 | - int trunc_flag, long offset, int whence) try { |
| 210 | + int trunc_flag, long offset, int whence) { |
| 211 | if (h == NULL) { |
| 212 | return MARISA_HANDLE_ERROR; |
| 213 | } |
| 214 | h->trie.save(filename, trunc_flag != 0, offset, whence); |
| 215 | return MARISA_OK; |
| 216 | -} catch (const marisa::Exception &ex) { |
| 217 | - return ex.status(); |
| 218 | } |
| 219 | |
| 220 | -marisa_status marisa_fwrite(const marisa_trie *h, FILE *file) try { |
| 221 | +marisa_status marisa_fwrite(const marisa_trie *h, FILE *file) { |
| 222 | if (h == NULL) { |
| 223 | return MARISA_HANDLE_ERROR; |
| 224 | } |
| 225 | h->trie.fwrite(file); |
| 226 | return MARISA_OK; |
| 227 | -} catch (const marisa::Exception &ex) { |
| 228 | - return ex.status(); |
| 229 | } |
| 230 | |
| 231 | -marisa_status marisa_write(const marisa_trie *h, int fd) try { |
| 232 | +marisa_status marisa_write(const marisa_trie *h, int fd) { |
| 233 | if (h == NULL) { |
| 234 | return MARISA_HANDLE_ERROR; |
| 235 | } |
| 236 | h->trie.write(fd); |
| 237 | return MARISA_OK; |
| 238 | -} catch (const marisa::Exception &ex) { |
| 239 | - return ex.status(); |
| 240 | } |
| 241 | |
| 242 | marisa_status marisa_restore(const marisa_trie *h, marisa_uint32 key_id, |
| 243 | - char *key_buf, size_t key_buf_size, size_t *key_length) try { |
| 244 | + char *key_buf, size_t key_buf_size, size_t *key_length) { |
| 245 | if (h == NULL) { |
| 246 | return MARISA_HANDLE_ERROR; |
| 247 | } else if (key_length == NULL) { |
| 248 | @@ -186,12 +168,10 @@ marisa_status marisa_restore(const marisa_trie *h, marisa_uint32 key_id, |
| 249 | } |
| 250 | *key_length = h->trie.restore(key_id, key_buf, key_buf_size); |
| 251 | return MARISA_OK; |
| 252 | -} catch (const marisa::Exception &ex) { |
| 253 | - return ex.status(); |
| 254 | } |
| 255 | |
| 256 | marisa_status marisa_lookup(const marisa_trie *h, |
| 257 | - const char *ptr, size_t length, marisa_uint32 *key_id) try { |
| 258 | + const char *ptr, size_t length, marisa_uint32 *key_id) { |
| 259 | if (h == NULL) { |
| 260 | return MARISA_HANDLE_ERROR; |
| 261 | } else if (key_id == NULL) { |
| 262 | @@ -203,14 +183,12 @@ marisa_status marisa_lookup(const marisa_trie *h, |
| 263 | *key_id = h->trie.lookup(ptr, length); |
| 264 | } |
| 265 | return MARISA_OK; |
| 266 | -} catch (const marisa::Exception &ex) { |
| 267 | - return ex.status(); |
| 268 | } |
| 269 | |
| 270 | marisa_status marisa_find(const marisa_trie *h, |
| 271 | const char *ptr, size_t length, |
| 272 | marisa_uint32 *key_ids, size_t *key_lengths, |
| 273 | - size_t max_num_results, size_t *num_results) try { |
| 274 | + size_t max_num_results, size_t *num_results) { |
| 275 | if (h == NULL) { |
| 276 | return MARISA_HANDLE_ERROR; |
| 277 | } else if (num_results == NULL) { |
| 278 | @@ -223,8 +201,6 @@ marisa_status marisa_find(const marisa_trie *h, |
| 279 | key_ids, key_lengths, max_num_results); |
| 280 | } |
| 281 | return MARISA_OK; |
| 282 | -} catch (const marisa::Exception &ex) { |
| 283 | - return ex.status(); |
| 284 | } |
| 285 | |
| 286 | marisa_status marisa_find_first(const marisa_trie *h, |
| 287 | @@ -262,7 +238,7 @@ marisa_status marisa_find_last(const marisa_trie *h, |
| 288 | marisa_status marisa_find_callback(const marisa_trie *h, |
| 289 | const char *ptr, size_t length, |
| 290 | int (*callback)(void *, marisa_uint32, size_t), |
| 291 | - void *first_arg_to_callback) try { |
| 292 | + void *first_arg_to_callback) { |
| 293 | if (h == NULL) { |
| 294 | return MARISA_HANDLE_ERROR; |
| 295 | } else if (callback == NULL) { |
| 296 | @@ -276,8 +252,6 @@ marisa_status marisa_find_callback(const marisa_trie *h, |
| 297 | ::FindCallback(callback, first_arg_to_callback)); |
| 298 | } |
| 299 | return MARISA_OK; |
| 300 | -} catch (const marisa::Exception &ex) { |
| 301 | - return ex.status(); |
| 302 | } |
| 303 | |
| 304 | marisa_status marisa_predict(const marisa_trie *h, |
| 305 | @@ -289,7 +263,7 @@ marisa_status marisa_predict(const marisa_trie *h, |
| 306 | |
| 307 | marisa_status marisa_predict_breadth_first(const marisa_trie *h, |
| 308 | const char *ptr, size_t length, marisa_uint32 *key_ids, |
| 309 | - size_t max_num_results, size_t *num_results) try { |
| 310 | + size_t max_num_results, size_t *num_results) { |
| 311 | if (h == NULL) { |
| 312 | return MARISA_HANDLE_ERROR; |
| 313 | } else if (num_results == NULL) { |
| 314 | @@ -303,13 +277,11 @@ marisa_status marisa_predict_breadth_first(const marisa_trie *h, |
| 315 | ptr, length, key_ids, NULL, max_num_results); |
| 316 | } |
| 317 | return MARISA_OK; |
| 318 | -} catch (const marisa::Exception &ex) { |
| 319 | - return ex.status(); |
| 320 | } |
| 321 | |
| 322 | marisa_status marisa_predict_depth_first(const marisa_trie *h, |
| 323 | const char *ptr, size_t length, marisa_uint32 *key_ids, |
| 324 | - size_t max_num_results, size_t *num_results) try { |
| 325 | + size_t max_num_results, size_t *num_results) { |
| 326 | if (h == NULL) { |
| 327 | return MARISA_HANDLE_ERROR; |
| 328 | } else if (num_results == NULL) { |
| 329 | @@ -323,14 +295,12 @@ marisa_status marisa_predict_depth_first(const marisa_trie *h, |
| 330 | ptr, length, key_ids, NULL, max_num_results); |
| 331 | } |
| 332 | return MARISA_OK; |
| 333 | -} catch (const marisa::Exception &ex) { |
| 334 | - return ex.status(); |
| 335 | } |
| 336 | |
| 337 | marisa_status marisa_predict_callback(const marisa_trie *h, |
| 338 | const char *ptr, size_t length, |
| 339 | int (*callback)(void *, marisa_uint32, const char *, size_t), |
| 340 | - void *first_arg_to_callback) try { |
| 341 | + void *first_arg_to_callback) { |
| 342 | if (h == NULL) { |
| 343 | return MARISA_HANDLE_ERROR; |
| 344 | } else if (callback == NULL) { |
| 345 | @@ -344,8 +314,6 @@ marisa_status marisa_predict_callback(const marisa_trie *h, |
| 346 | ::PredictCallback(callback, first_arg_to_callback)); |
| 347 | } |
| 348 | return MARISA_OK; |
| 349 | -} catch (const marisa::Exception &ex) { |
| 350 | - return ex.status(); |
| 351 | } |
| 352 | |
| 353 | size_t marisa_get_num_tries(const marisa_trie *h) { |
| 354 | diff --git a/lib/marisa/trie-inline.h b/lib/marisa/trie-inline.h |
| 355 | index 6b1e502..2c9218c 100644 |
| 356 | --- a/lib/marisa/trie-inline.h |
| 357 | +++ b/lib/marisa/trie-inline.h |
| 358 | @@ -179,7 +179,7 @@ inline bool Trie::find_child(UInt32 &node, T query, |
| 359 | } |
| 360 | |
| 361 | template <typename T, typename U> |
| 362 | -std::size_t Trie::find_callback_(T query, U callback) const try { |
| 363 | +std::size_t Trie::find_callback_(T query, U callback) const { |
| 364 | std::size_t count = 0; |
| 365 | UInt32 node = 0; |
| 366 | std::size_t pos = 0; |
| 367 | @@ -192,10 +192,6 @@ std::size_t Trie::find_callback_(T query, U callback) const try { |
| 368 | } |
| 369 | } while (!query.ends_at(pos) && find_child<T>(node, query, pos)); |
| 370 | return count; |
| 371 | -} catch (const std::bad_alloc &) { |
| 372 | - MARISA_THROW(MARISA_MEMORY_ERROR); |
| 373 | -} catch (const std::length_error &) { |
| 374 | - MARISA_THROW(MARISA_SIZE_ERROR); |
| 375 | } |
| 376 | |
| 377 | template <typename T> |
| 378 | @@ -235,7 +231,7 @@ inline bool Trie::predict_child(UInt32 &node, T query, std::size_t &pos, |
| 379 | } |
| 380 | |
| 381 | template <typename T, typename U> |
| 382 | -std::size_t Trie::predict_callback_(T query, U callback) const try { |
| 383 | +std::size_t Trie::predict_callback_(T query, U callback) const { |
| 384 | std::string key; |
| 385 | UInt32 node = 0; |
| 386 | std::size_t pos = 0; |
| 387 | @@ -299,10 +295,6 @@ std::size_t Trie::predict_callback_(T query, U callback) const try { |
| 388 | ++stack_pos; |
| 389 | } |
| 390 | return count; |
| 391 | -} catch (const std::bad_alloc &) { |
| 392 | - MARISA_THROW(MARISA_MEMORY_ERROR); |
| 393 | -} catch (const std::length_error &) { |
| 394 | - MARISA_THROW(MARISA_SIZE_ERROR); |
| 395 | } |
| 396 | |
| 397 | inline UInt32 Trie::key_id_to_node(UInt32 key_id) const { |
| 398 | diff --git a/lib/marisa/trie-search.cc b/lib/marisa/trie-search.cc |
| 399 | index 1f35681..098e0b3 100644 |
| 400 | --- a/lib/marisa/trie-search.cc |
| 401 | +++ b/lib/marisa/trie-search.cc |
| 402 | @@ -247,30 +247,22 @@ std::size_t Trie::predict_depth_first( |
| 403 | |
| 404 | void Trie::restore_(UInt32 key_id, std::string *key) const { |
| 405 | const std::size_t start_pos = key->length(); |
| 406 | - try { |
| 407 | - UInt32 node = key_id_to_node(key_id); |
| 408 | - while (node != 0) { |
| 409 | - if (has_link(node)) { |
| 410 | - const std::size_t prev_pos = key->length(); |
| 411 | - if (has_trie()) { |
| 412 | - trie_->trie_restore(get_link(node), key); |
| 413 | - } else { |
| 414 | - tail_restore(node, key); |
| 415 | - } |
| 416 | - std::reverse(key->begin() + prev_pos, key->end()); |
| 417 | + UInt32 node = key_id_to_node(key_id); |
| 418 | + while (node != 0) { |
| 419 | + if (has_link(node)) { |
| 420 | + const std::size_t prev_pos = key->length(); |
| 421 | + if (has_trie()) { |
| 422 | + trie_->trie_restore(get_link(node), key); |
| 423 | } else { |
| 424 | - *key += labels_[node]; |
| 425 | + tail_restore(node, key); |
| 426 | } |
| 427 | - node = get_parent(node); |
| 428 | - } |
| 429 | - std::reverse(key->begin() + start_pos, key->end()); |
| 430 | - } catch (const std::bad_alloc &) { |
| 431 | - key->resize(start_pos); |
| 432 | - MARISA_THROW(MARISA_MEMORY_ERROR); |
| 433 | - } catch (const std::length_error &) { |
| 434 | - key->resize(start_pos); |
| 435 | - MARISA_THROW(MARISA_SIZE_ERROR); |
| 436 | + std::reverse(key->begin() + prev_pos, key->end()); |
| 437 | + } else { |
| 438 | + *key += labels_[node]; |
| 439 | + } |
| 440 | + node = get_parent(node); |
| 441 | } |
| 442 | + std::reverse(key->begin() + start_pos, key->end()); |
| 443 | } |
| 444 | |
| 445 | void Trie::trie_restore(UInt32 node, std::string *key) const { |
| 446 | @@ -468,7 +460,7 @@ template std::size_t Trie::tail_match<const Query &>(UInt32 node, |
| 447 | |
| 448 | template <typename T, typename U, typename V> |
| 449 | std::size_t Trie::find_(T query, U key_ids, V key_lengths, |
| 450 | - std::size_t max_num_results) const try { |
| 451 | + std::size_t max_num_results) const { |
| 452 | if (max_num_results == 0) { |
| 453 | return 0; |
| 454 | } |
| 455 | @@ -489,10 +481,6 @@ std::size_t Trie::find_(T query, U key_ids, V key_lengths, |
| 456 | } |
| 457 | } while (!query.ends_at(pos) && find_child<T>(node, query, pos)); |
| 458 | return count; |
| 459 | -} catch (const std::bad_alloc &) { |
| 460 | - MARISA_THROW(MARISA_MEMORY_ERROR); |
| 461 | -} catch (const std::length_error &) { |
| 462 | - MARISA_THROW(MARISA_SIZE_ERROR); |
| 463 | } |
| 464 | |
| 465 | template <typename T> |
| 466 | @@ -533,7 +521,7 @@ UInt32 Trie::find_last_(T query, std::size_t *key_length) const { |
| 467 | |
| 468 | template <typename T, typename U, typename V> |
| 469 | std::size_t Trie::predict_breadth_first_(T query, U key_ids, V keys, |
| 470 | - std::size_t max_num_results) const try { |
| 471 | + std::size_t max_num_results) const { |
| 472 | if (max_num_results == 0) { |
| 473 | return 0; |
| 474 | } |
| 475 | @@ -596,15 +584,11 @@ std::size_t Trie::predict_breadth_first_(T query, U key_ids, V keys, |
| 476 | node_end = louds_pos_to_node(get_child(node_end), node_end); |
| 477 | } |
| 478 | return count; |
| 479 | -} catch (const std::bad_alloc &) { |
| 480 | - MARISA_THROW(MARISA_MEMORY_ERROR); |
| 481 | -} catch (const std::length_error &) { |
| 482 | - MARISA_THROW(MARISA_SIZE_ERROR); |
| 483 | } |
| 484 | |
| 485 | template <typename T, typename U, typename V> |
| 486 | std::size_t Trie::predict_depth_first_(T query, U key_ids, V keys, |
| 487 | - std::size_t max_num_results) const try { |
| 488 | + std::size_t max_num_results) const { |
| 489 | if (max_num_results == 0) { |
| 490 | return 0; |
| 491 | } else if (keys.is_valid()) { |
| 492 | @@ -665,10 +649,6 @@ std::size_t Trie::predict_depth_first_(T query, U key_ids, V keys, |
| 493 | ++stack_pos; |
| 494 | } |
| 495 | return count; |
| 496 | -} catch (const std::bad_alloc &) { |
| 497 | - MARISA_THROW(MARISA_MEMORY_ERROR); |
| 498 | -} catch (const std::length_error &) { |
| 499 | - MARISA_THROW(MARISA_SIZE_ERROR); |
| 500 | } |
| 501 | |
| 502 | template <typename T> |
| 503 | diff --git a/lib/marisa/writer.cc b/lib/marisa/writer.cc |
| 504 | index 2256f59..55dcb97 100644 |
| 505 | --- a/lib/marisa/writer.cc |
| 506 | +++ b/lib/marisa/writer.cc |
| 507 | @@ -92,11 +92,7 @@ void Writer::write_data(const void *data, std::size_t size) { |
| 508 | MARISA_THROW(MARISA_IO_ERROR); |
| 509 | } |
| 510 | } else if (stream_ != NULL) { |
| 511 | - try { |
| 512 | - if (!stream_->write(static_cast<const char *>(data), size)) { |
| 513 | - MARISA_THROW(MARISA_IO_ERROR); |
| 514 | - } |
| 515 | - } catch (const std::ios_base::failure &) { |
| 516 | + if (!stream_->write(static_cast<const char *>(data), size)) { |
| 517 | MARISA_THROW(MARISA_IO_ERROR); |
| 518 | } |
| 519 | } else { |