+2021-01-29 Theppitak Karoonboonyanan <theppitak@gmail.com>
+
+ * NEWS:
+ === Version 0.2.13 ===
+
+2021-01-24 Theppitak Karoonboonyanan <theppitak@gmail.com>
+
+ Update library versioning
+
+ * configure.ac: Bump library versioning to reflect API addition.
+
+2021-01-24 Theppitak Karoonboonyanan <theppitak@gmail.com>
+
+ Rename trie_byte_strlen() to trie_char_strsize().
+
+ The object of the function is TrieChar string. Let's keep
+ that semantics in the name.
+
+ * datrie/trie-string.h, datrie/trie-string.c
+ (trie_byte_strlen -> trie_char_strsize):
+ - Rename the function.
+ * datrie/tail.c (tail_get_serialized_size, tail_serialize):
+ - Replace trie_byte_strlen() calls with the new name.
+
+2021-01-24 Theppitak Karoonboonyanan <theppitak@gmail.com>
+
+ Revise test_serialization.
+
+ * tests/test_serialization.c (-trie_enum_mark_rec):
+ - Drop unused callback function.
+ * tests/test_serialization (main):
+ - Drop unused 'is_failed' variable.
+ - "%Ilu" -> "%lu" printf format.
+ - Rearrange error handling in stack unwinding style.
+ - Add '\n' to printf messages.
+ - Free 'trieSerializedData'.
+
+ We're not moving to C99 yet, but the declaration amid code is
+ too useful to remove. And it's just in the test code, not in
+ the main source. So we still allow it.
+
+2021-01-24 Theppitak Karoonboonyanan <theppitak@gmail.com>
+
+ Get rid of <unistd.h> include in the new test.
+
+ * tests/test_serialization.c (main):
+ - Replace unlink() calls with remove() from <stdio.h> and drop
+ <unistd.h> include.
+
+2021-01-24 Theppitak Karoonboonyanan <theppitak@gmail.com>
+
+ Adjust file-internal function declarations.
+
+ * datrie/fileutils.c
+ (parse_int16_be, serialize_int32_be, serialize_int16_be):
+ - Re-declare functions as static.
+ * datrie/fileutils.c (parse_int16_be):
+ - Make the 'buff' arg const pointer.
+ * datrie/fileutils.c:
+ - Remove some blank lines in source.
+
+2021-01-24 Theppitak Karoonboonyanan <theppitak@gmail.com>
+
+ Fix documentation.
+
+ * datrie/tail.h (Tail typedef):
+ - Fix comment (Double-array -> Tail).
+
+2021-01-24 Theppitak Karoonboonyanan <theppitak@gmail.com>
+
+ Cosmetic changes.
+
+ * datrie/fileutils.c:
+ * datrie/trie-string.c:
+ * datrie/alpha-map.c:
+ * datrie/darray.h:
+ * datrie/darray.c:
+ * datrie/tail.h:
+ * datrie/tail.c:
+ * datrie/trie.c:
+ * tools/trie-tool.c:
+ * tests/test_serialization.c:
+ - Use space before left parenthesis.
+ - Use old-style C comments.
+ - Remove trailing spaces.
+ - Re-wrap lines.
+
+2021-01-23 KOLANICH <KOLANICH@users.noreply.github.com>
+
+ Added serialization of the trie into a memory buffer.
+
+ * datrie/fileutils.c
+ (file_write_int32, +serialize_int32,
+ file_write_int16, +serialize_int16,
+ file_read_int32, +parse_int32_be,
+ file_read_int16, +parse_int16_be):
+ - Split binary read/write operations into separate functions.
+ * datrie/fileutils.h, datrie/fileutils.c
+ (+serialize_int32_be_incr, +serialize_int16_be_incr):
+ - Add serialization utility functions with pointer advancement.
+ * datrie/trie-string.h, datrie/trie-string.c
+ (+trie_byte_strlen):
+ - Add utility method for calculating TrieChar string size in bytes.
+
+ * datrie/alpha-map-private.h, datrie/alpha-map.c
+ (+alpha_map_get_serialized_size, +alpha_map_serialize_bin):
+ - Add AlphaMap serialization methods.
+ * datrie/darray.h, datrie/darray.c
+ (+da_get_serialized_size, +da_serialize):
+ - Add DArray serialization methods.
+ * datrie/tail.h, datrie/tail.c
+ (+tail_get_serialized_size, +tail_serialize):
+ - Add Tail serialization methods.
+ * datrie/trie.h, datrie/trie.c
+ (+trie_get_serialized_size, +trie_serialize):
+ - Add Trie serialization methods.
+ * datrie/libdatrie.map, datrie/libdatrie.def:
+ - Add export symbols for Trie serialization.
+
+ * tests/Makefile.am, +tests/test_serialization.c:
+ - Add serialization test.
+
+ Pull Request #12.
+
+2021-01-22 Theppitak Karoonboonyanan <theppitak@gmail.com>
+
+ Get rid of <unistd.h> include.
+
+ * tests/test_file.c (main):
+ - Replace unlink() calls with remove() from <stdio.h> and drop
+ <unistd.h> include, fixing build issue on Windows.
+
+ Addressing Windows build issue differently from what proposed by
+ @fanc999 in pull request #15. Thanks @fanc999 for first raising this.
+
+2021-01-15 Theppitak Karoonboonyanan <theppitak@gmail.com>
+
+ Use TRIE_CHAR_TERM in TAIL I/O methods.
+
+ * datrie/tail.c (tail_fwrite):
+ - Replace strlen() with trie_char_strlen() on suffix,
+ which is TrieChar string.
+ * datrie/tail.c (tail_fread):
+ - Append TRIE_CHAR_TERM, rather than literal zero,
+ as suffix terminator.
+
+2021-01-15 Theppitak Karoonboonyanan <theppitak@gmail.com>
+
+ Use TRIE_CHAR_TERM in TrieIterator methods.
+
+ * datrie/trie.c (trie_iterator_get_key):
+ - Replace strlen() with trie_char_strlen() on tail_str,
+ which is TrieChar string.
+ - Check tail_str termination against TRIE_CHAR_TERM, not zero.
+
+2021-01-14 Theppitak Karoonboonyanan <theppitak@gmail.com>
+
+ Fix wrong TRIE_CHAR_TERM semantics.
+
+ * datrie/trie.h (trie_state_is_terminal):
+ - Test for terminal state using zero AlphaChar.
+ TRIE_CHAR_TERM is a TrieChar, although it's also accidentally zero.
+
+2021-01-14 Theppitak Karoonboonyanan <theppitak@gmail.com>
+
+ Reduce loops in alpha_map_recalc_work_area().
+
+ * datrie/alpha-map.c (alpha_map_recalc_work_area):
+ - Instead of pre-filling trie-to-alpha map with errors
+ and setting valid cells afterward, just fill error cells
+ left after valid cells are done. Then, finally set
+ TRIE_CHAR_TERM cell.
+
+2021-01-10 Theppitak Karoonboonyanan <theppitak@gmail.com>
+
+ Rewrite AlphaMap recalc.
+
+ * datrie/alpha-map.c (alpha_map_recalc_work_area):
+ Rewrite alpha-to-trie & trie-to-alpha maps recalculation
+ - For clearer relation between the two maps
+ - To allow other TRIE_CHAR_TERM values than zero
+
+2021-01-09 Theppitak Karoonboonyanan <theppitak@gmail.com>
+
+ Use TRIE_CHAR_TERM macro instead of zero.
+
+ * datrie/alpha-map.c
+ (alpha_map_char_to_trie, alpha_map_char_to_trie_str):
+ * datrie/trie.c (trie_branch_in_branch, trie_branch_in_tail):
+ * datrie/tail.c (tail_walk_str, tail_walk_char):
+ - Use TRIE_CHAR_TERM instead of hard-wired zero when working
+ with raw trie string termination.
+ * datrie/trie-string.c (trie_string_terminate):
+ - Append TRIE_CHAR_TERM instead of simply delegating to
+ dstring_terminate().
+
+2021-01-09 Theppitak Karoonboonyanan <theppitak@gmail.com>
+
+ Share static trie string functions internally.
+
+ * datrie/trie-string.h, datrie/trie-string.c, datrie/tail.c
+ (tc_strlen -> trie_char_strlen, tc_strdup -> trie_char_strdup):
+ - Move private functions in tail.c to trie-string.[ch],
+ with new full names under new "static trie string" section.
+ - Check/assign string terminator using TRIE_CHAR_TERM
+ instead of zero.
+ * datrie/tail.c (tail_set_suffix):
+ - Call the new trie_char_strdup() instead of tc_strdup().
+ * datrie/alpha-map.c (alpha_map_trie_to_char_str):
+ - Call trie_char_strlen() instead of strlen().
+
+2021-01-06 Theppitak Karoonboonyanan <theppitak@gmail.com>
+
+ Get rid of char semantics from TrieChar
+
+ * datrie/trie.c (trie_branch_in_branch, trie_branch_in_tail):
+ - Check null TrieChar with int zero instead of char.
+
+2021-01-05 Theppitak Karoonboonyanan <theppitak@gmail.com>
+
+ Use proper #include form in installed header.
+
+ * datrie/alpha-map.h:
+ - Use angle quotes form instead of double quotes in #include.
+
+2021-01-05 Theppitak Karoonboonyanan <theppitak@gmail.com>
+
+ Fix some documentations.
+
+ * datrie/trie.c (trie_is_dirty):
+ - Adjust wording to make clear the file is out of sync,
+ not the other way around.
+ * datrie/trie.c (trie_store, trie_store_if_absent):
+ - Fix typo in the description of 'key' parameter.
+ * datrie/trie.c (trie_store_if_absent):
+ - Minor wording adjustment (inserted, not appended).
+
+2020-12-30 Theppitak Karoonboonyanan <theppitak@gmail.com>
+
+ Fix isspace() arg problem on NetBSD.
+
+ * tools/trietool.c (command_add_list, string_trim):
+ - Cast char to unsigned char before passing to isspace().
+
+ Thanks Sean <scole_mail@gmx.com> for the report via a personal mail.
+
+2019-12-20 Theppitak Karoonboonyanan <theppitak@gmail.com>
+
+ Use GitHub issue tracker as bug report address.
+
+ * configure.ac:
+ - Replace bug report e-mail address with GitHub issue tracker URL.
+
+2019-08-05 Theppitak Karoonboonyanan <theppitak@gmail.com>
+
+ Stop installing README.migration
+
+ It's supposed to be internal document now.
+
+ * Makefile.am:
+ - Remove README.migration from doc_DATA.
+
+2019-01-21 Theppitak Karoonboonyanan <theppitak@gmail.com>
+
+ Fix cross-compiling issue caused by AC_FUNC_MALLOC
+
+ * configure.ac:
+ - Replace AC_FUNC_MALLOC with AC_CHECK_FUNCS([malloc]),
+ as we don't rely on GNU's malloc(0) behavior.
+
+ Thanks Vanessa McHale for the report. Closes: #11
+
+2018-11-23 Theppitak Karoonboonyanan <theppitak@gmail.com>
+
+ Fix wrong key listing in byte trie
+
+ * tests/Makefile.am, +tests/test_byte_list.c:
+ - Add test case
+ * datrie/alpha-map.c (alpha_map_recalc_work_area):
+ - Index trie_to_alpha_map[] using TrieIndex, not TrieChar type,
+ to prevent overflow upon incrementing over 0xff.
+ - Drop tc variable and just reuse trie_last.
+
+ Thanks @legale for the report.
+
+ Closes: #9
+ https://github.com/tlwg/libdatrie/issues/9
+
+2018-06-19 Theppitak Karoonboonyanan <theppitak@gmail.com>
+
+ * configure.ac:
+ - Bump library revision to reflect code changes.
+
+ * NEWS:
+ === Version 0.2.12 ===
+
+2018-06-19 Theppitak Karoonboonyanan <theppitak@gmail.com>
+
+ Use HTTPS in URL
+
+ * README:
+ - Update document URL to HTTPS
+
+2018-06-14 Theppitak Karoonboonyanan <theppitak@gmail.com>
+
+ Cast (wchar_t *) to fix warnings in tests
+
+ "%ls" printf() format requires (wchar_t *) [aka int *] arg.
+ So, let's cast (AlphaChar *) [aka unsigned int *] to satisfy it.
+
+ * tests/test_walk.c:
+ * tests/test_iterator.c:
+ * tests/test_store-retrieve.c:
+ * tests/test_file.c:
+ * tests/test_nonalpha.c:
+ * tests/test_null_trie.c:
+ - Add <wchar.h> include, for wchar_t type
+ - Cast "%ls" args from (AlphaChar *) to (wchar_t *)
+
+2018-06-06 Theppitak Karoonboonyanan <theppitak@gmail.com>
+
+ Avoid non-ANSI C snprintf()
+
+ * tools/trietool.c (+full_path, prepare_trie, close_trie):
+ - Instead of preparing full path name with snprintf(), which is
+ non-ANSI, and still risks path name trimming, do it with
+ size-calculated malloc().
+ - free() it as needed.
+
+2018-06-04 Theppitak Karoonboonyanan <theppitak@gmail.com>
+
+ Fix sscanf() string format
+
+ * tools/trietool.c (prepare_trie):
+ - Define b, e as unsigned int, as required by "%x" format.
+ Fixing warning from '-Wformat=' gcc option.
+
+2018-06-04 Theppitak Karoonboonyanan <theppitak@gmail.com>
+
+ Fix compiler warnings in tests
+
+ * tests/test_byte_alpha.c (main):
+ * tests/test_file.c (main):
+ * tests/test_iterator.c (main):
+ * tests/test_nonalpha.c (main):
+ * tests/test_null_trie.c (main):
+ * tests/test_store-retrieve.c (main):
+ * tests/test_term_state.c (main):
+ * tests/test_walk.c (main):
+ - Declare main function with 'main (void)'.
+ Fixing warning from '-Wstrict-prototypes' gcc option.
+ * tests/test_walk.c (main):
+ - Split long string, which required C90 compilers.
+ Fixing warning from '-Woverlength-strings' gcc option.
+
+2018-06-04 Theppitak Karoonboonyanan <theppitak@gmail.com>
+
+ Duplicate TrieChar string in more portable manner
+
+ * datrie/tail.c (tail_set_suffix, +tc_strdup, +tc_strlen):
+ - Replace cast strdup() with crafted implementation,
+ allowing TrieChar to be of larger size than char.
+ Fixing warning from '-Wint-to-pointer-cast' gcc option.
+
+2018-06-04 Theppitak Karoonboonyanan <theppitak@gmail.com>
+
+ Split long string
+
+ * tools/trietool.c (usage):
+ - Split help message which was too long and required C90 compiler.
+ Caught by '-Woverlength-strings' gcc option.
+
+2018-06-04 Theppitak Karoonboonyanan <theppitak@gmail.com>
+
+ Remove unused byte, word, dword typedefs
+
+ These are likely to conflict with other uses.
+
+ * datrie/typedefs.h (-byte, -word, -dword):
+ - Remove the unused typedefs
+
+ Thanks Peter Moulder for the patch.
+
+2018-06-04 Theppitak Karoonboonyanan <theppitak@gmail.com>
+
+ Rename TRUE/FALSE in Bool enum to avoid clash
+
+ Some other header file may have already define TRUE/FALSE.
+
+ * datrie/typedefs.h (Bool):
+ - Rename FALSE, TRUE to DA_FALSE, DA_TRUE respectively,
+ and define FALSE, TRUE macros only if they haven't been defined.
+
+ Thanks Peter Moulder for the patch.
+
+2018-06-04 Theppitak Karoonboonyanan <theppitak@gmail.com>
+
+ Declare argument-less functions with "(void)"
+
+ "f()" declaration form is K&R style, specifying that no information
+ about the number or types of parameters is supplied. This caused
+ warnings on '-Wstrict-prototypes' gcc option.
+
+ * datrie/alpha-map.h, datrie/alpha-map.c (alpha_map_new):
+ * datrie/darray.h, datrie/darray.c (da_new, symbols_new):
+ * datrie/tail.h, datrie/tail.c (tail_new):
+ * tests/utils.h, tests/utils.c (en_alpha_map_new, en_trie_new):
+ - Use "(void)" form in declaration
+ - Also use "(void)" form in definition, for consistency
+
+ Thanks Peter Moulder for the initial patch.
+
+2018-05-24 Theppitak Karoonboonyanan <theppitak@gmail.com>
+
+ Remove duplicate include
+
+ * tools/trietool.c:
+ - Remove duplicate include <config.h>
+
+2018-04-23 Theppitak Karoonboonyanan <theppitak@gmail.com>
+
+ Add missing include in test
+
+ * tests/test_byte_alpha.c:
+ - Add missing include for utils.h
+
+2018-04-23 Theppitak Karoonboonyanan <theppitak@gmail.com>
+
+ * configure.ac:
+ - Bump library revision to reflect code changes.
+
+ * NEWS:
+ === Version 0.2.11 ===
+
+2018-04-21 Theppitak Karoonboonyanan <theppitak@gmail.com>
+
+ Fix reported segfault on full-range alpha map
+
+ * tests/Makefile.am, +tests/test_byte_alpha.c:
+ - Add test case
+ * datrie/alpha-map.c (alpha_map_recalc_work_area()):
+ - Redeclare trie_last as TrieIndex, to prevent overflow.
+
+ Thanks Xiao Wang for the report, and @nevermatch for the analysis.
+
+ Closes: #6
+ https://github.com/tlwg/libdatrie/issues/6
+
+2018-03-29 Theppitak Karoonboonyanan <theppitak@gmail.com>
+
+ Fix trie_state_get_data() at a prefix key
+
+ When getting data from a state which terminates a key that is
+ a prefix of another key, a terminator should be tried, so it
+ jumps from DA to TAIL, where we can get the data.
+
+ * tests/Makefile.am, +tests/test_term_state.c:
+ - Add a test case with {'ab', 'abc'} dictionary, which fails previous
+ code when retrieving data for key 'ab'.
+ * datrie/trie.c (trie_state_get_data()):
+ - Instead of simply checking for leaf state, which only caught a state
+ in TAIL, also try walking with a terminator when still in DA.
+ - Replace 'leaf state' with 'terminal state' in documentation,
+ for more clarity.
+ - Also return error on null state pointer.
+
+ Thanks Filip Pytloun from the pytries project for the initial patch.
+
+2017-09-06 Theppitak Karoonboonyanan <theppitak@gmail.com>
+
+ Revise description about search time complexity
+
+ * README:
+ - Clarify that search time is O(m), where m is the key length,
+ instead of O(1), while still claim that it's independent of
+ database size.
+
+ This closes #4.
+ https://github.com/tlwg/libdatrie/issues/4
+
+2016-12-14 Theppitak Karoonboonyanan <theppitak@gmail.com>
+
+ Include git-version-gen in tarball
+
+ * Makefile.am:
+ - Add build-aux/git-version-gen to EXTRA_DIST.
+
+2016-09-21 Theppitak Karoonboonyanan <theppitak@gmail.com>
+
+ Fix iconv() return value checking.
+
+ * tools/trietool.c (conv_to_alpha):
+ - Check iconv() return value against (size_t) -1, rather than
+ for its negativity, as size_t can be unsigned.
+
+ Thanks Daniel Macks for the report on Issue #3.
+ https://github.com/tlwg/libdatrie/issues/3
+
+2016-09-21 Theppitak Karoonboonyanan <theppitak@gmail.com>
+
+ Use versioning based on Git snapshot.
+
+ * Makefile.am:
+ - Add dist-hook to generate VERSION file on tarball generation.
+ * +build-aux/git-version-gen:
+ - Add script to generate version based on 'git describe'
+ if in git tree, or using VERSION file if in release tarball.
+ * configure.ac:
+ - Call git-version-gen to get package version.
+
+2015-10-20 Theppitak Karoonboonyanan <theppitak@gmail.com>
+
+ * configure.ac:
+ - Bump library revision to reflect code changes.
+
+ * NEWS, configure.ac:
+ === Version 0.2.10 ===
+
+2015-10-13 Theppitak Karoonboonyanan <theppitak@gmail.com>
+
+ Optimize AlphaMap mapping.
+
+ alpha_map_char_to_trie() is called everywhere before trie state
+ transition. It's an important bottleneck.
+
+ We won't change the persistent AlphaMap structure, but will add
+ pre-calculated lookup tables for use at run-time.
+
+ * datrie/alpha-map.c (struct _AlphaMap):
+ - Add members for alpha-to-trie and trie-to-alpha lookup tables.
+ * datrie/alpha-map.c (alpha_map_new, alpha_map_free):
+ - Initialize & free the tables properly.
+ * datrie/alpha-map.c (alpha_map_add_range -> alpha_map_add_range_only
+ + alpha_map_recalc_work_area):
+ - Split alpha_map_add_range() API into two parts: adding the range
+ as usual and recalculate the lookup tables.
+ * datrie/alpha-map.c (alpha_map_clone, alpha_map_fread_bin):
+ - Call alpha_map_add_range_only() repeatedly before calling
+ alpha_map_recalc_work_area() once.
+ * datrie/alpha-map.c (alpha_map_char_to_trie, alpha_map_trie_to_char):
+ - Look up the pre-calculated tables instead of calculating on
+ every call.
+
+ This appears to save time by 14.6% for total alpha_char_to_trie()
+ calls and even lower its bottleneck rank by 1 rank on a libthai
+ test case. It reduces 0.2% run time of the total libthai test case.
+
+ Note that the time saved would be even more in case of multiple
+ uncontinuous alphabet ranges, at the expense of more memory used.
+
+2015-08-18 Theppitak Karoonboonyanan <theppitak@gmail.com>
+
+ Fix doxygen version checking.
+
+ * configure.ac:
+ - Correctly compare doxygen versions. Simple expr comparison
+ didn't work with version 1.8.10.
+
+ Thanks Petr Gajdos <pgajdos@suse.cz> for the patch.
+
+2015-06-24 Theppitak Karoonboonyanan <theppitak@gmail.com>
+
+ * datrie/tail.c (tail_set_suffix):
+ - Catch strdup() failure.
+
+2015-06-24 Theppitak Karoonboonyanan <theppitak@gmail.com>
+
+ * configure.ac: Post-release version suffix added.
+
+2015-05-03 Theppitak Karoonboonyanan <theppitak@gmail.com>
+
+ * NEWS, configure.ac:
+ === Version 0.2.9 ===
+
+2015-05-03 Theppitak Karoonboonyanan <theppitak@gmail.com>
+
+ Use relative paths for symlinks.
+
+ * tools/Makefile.am, man/Makefile.am:
+ - Use relative paths for symlinks to avoid confusion in
+ installation with DESTDIR.
+
+2015-05-03 Theppitak Karoonboonyanan <theppitak@gmail.com>
+
+ Also install symlink for old trietool.
+
+ * man/Makefile.am:
+ - Add hooks to install/uninstall symlink for old man page.
+
+2015-05-02 Theppitak Karoonboonyanan <theppitak@gmail.com>
+
+ * configure.ac:
+ - Bump library revision to reflect code changes.
+
+2015-04-29 Theppitak Karoonboonyanan <theppitak@gmail.com>
+
+ Bump doxygen required version.
+
+ * configure.ac:
+ - Bump doxygen required version to 1.8.8, according to recent
+ Doxyfile update.
+
+2015-04-21 Theppitak Karoonboonyanan <theppitak@gmail.com>
+
+ Fix infinite loop on empty trie iteration.
+
+ * tests/Makefile.am, +tests/test_null_trie.c:
+ - Add test case for empty trie iteration.
+
+ * datrie/darray.c (da_first_separate):
+ - Fix error condition after loop ending.
+
+ Thanks Sergei Lebedev <sergei.a.lebedev@gmail.com> for the report
+ via personal mail.
+
+ Original report: https://github.com/kmike/datrie/issues/17
+
+2015-04-12 Theppitak Karoonboonyanan <theppitak@gmail.com>
+
+ Document about alphabet size.
+
+ * datrie/trie.h:
+ - Add to doc comment a description on the alphabet size limit
+ and the mapped raw codes.
+
+ Thanks edgehogapp for the suggestion.
+ https://groups.google.com/forum/#!topic/thai-linux-foss-devel/U-O__IfviQ0
+
+2015-04-11 Theppitak Karoonboonyanan <theppitak@gmail.com>
+
+ Clarify Symbols' struct & methods.
+
+ * datrie/darray.c (struct _Symbols):
+ - Use TRIE_CHAR_MAX + 1 instead of hard-coded value for symbols[]
+ array size.
+
+ Thanks edgehogapp for the suggestion.
+ https://groups.google.com/forum/#!topic/thai-linux-foss-devel/U-O__IfviQ0
+
+ * datrie/darray.h, datrie/darray.c (symbols_new, symbols_add):
+ - Hide symbols_new() and symbols_add() for internal use.
+
+2015-03-06 Theppitak Karoonboonyanan <theppitak@gmail.com>
+
+ Update Doxyfile.
+
+ * doc/Doxyfile.in:
+ - Updated for doxygen 1.8.8 with 'doxygen -u'.
+
+2015-03-02 Theppitak Karoonboonyanan <theppitak@gmail.com>
+
+ Catch realloc failure.
+
+ * datrie/tail.c (tail_alloc_block):
+ - Check realloc() result on t->tails reallocation and return
+ failure code if failed.
+ * datrie/tail.c (tail_add_suffix):
+ - Check return value from tail_alloc_block() and return failure
+ code if failed.
+ - Update documentation.
+
+2015-03-02 Theppitak Karoonboonyanan <theppitak@gmail.com>
+
+ Catch realloc failure.
+
+ * datrie/darray.c (da_extend_pool):
+ - Check realloc() result on d->cells reallocation and handle
+ failure properly.
+
+2015-02-27 Theppitak Karoonboonyanan <theppitak@gmail.com>
+
+ Catch malloc failure.
+
+ * datrie/tail.c (tail_fread):
+ - Check malloc() result on suffix string and exit properly.
+
+2015-02-26 Theppitak Karoonboonyanan <theppitak@gmail.com>
+
+ More micro-optimization with LIKELY/UNLIKELY.
+
+ * datrie/alpha-map.c (alpha_map_char_to_trie, alpha_map_trie_to_char):
+ - Use UNLIKELY() when checking for NUL character.
+
+2015-02-10 Theppitak Karoonboonyanan <theppitak@gmail.com>
+
+ Fix 'make distcheck' failure.
+
+ * doc/Makefile.am:
+ - Remove doxygen db file on clean.
+
+2015-02-10 Theppitak Karoonboonyanan <theppitak@gmail.com>
+
+ More update of my e-mail address.
+
+ * man/trietool.1:
+ - Update my e-mail address.
+
+2015-02-10 Theppitak Karoonboonyanan <theppitak@gmail.com>
+
+ Rename trietool-0.2 utility to trietool.
+
+ * configure.ac:
+ - Check for ln -s
+ * tools/Makefile.am:
+ - Rename bin target from trietool-0.2 to trietool.
+ - Add hooks to install/uninstall symlink with old name.
+ * man/Makefile.am, man/trietool-0.2.1 -> man/trietool.1:
+ - Rename & update manpage accordingly.
+
+2015-02-06 Theppitak Karoonboonyanan <theppitak@gmail.com>
+
+ Micro-optimize with likely/unlikely hints.
+
+ * datrie/trie-private.h:
+ - Add LIKELY() and UNLIKELY() macros based on compiler extension.
+ * datrie/alpha-map.c
+ (alpha_map_new, alpha_map_clone, alpha_map_fread_bin,
+ alpha_map_add_range, alpha_map_char_to_trie_str,
+ alpha_map_trie_to_char_str):
+ * datrie/darray.c
+ (symbols_new, da_new, da_fread, da_get_base, da_get_check,
+ da_set_base, da_set_check, da_insert_branch, da_find_free_base,
+ da_extend_pool):
+ * datrie/dstring.c (dstring_new, dstring_ensure_space):
+ * datrie/tail.c
+ (tail_new, tail_fread, tail_get_suffix, tail_set_suffix,
+ tail_get_data, tail_set_data, tail_walk_str, tail_walk_char):
+ * datrie/trie.c
+ (trie_new, trie_fread, trie_enumerate, trie_state_new,
+ trie_state_walk, trie_state_is_walkable, trie_iterator_new):
+ - Use LIKELY() and UNLIKELY() where it is known to be so, mostly
+ for one-time initialization and failure handling.
+ * datrie/alpha-map.c, datrie/tail.c, datrie/tail.c:
+ - These are the files that need to include trie-private.h
+ because of this.
+
+ Callgrind says it does help speed up a little bit.
+
+2015-02-05 Theppitak Karoonboonyanan <theppitak@gmail.com>
+
+ Disable timestamp in Doxygen-generated doc.
+
+ * doc/Doxyfile.in:
+ - Set HTML_TIMESTAMP to NO to make the document reproducible.
+ (reported by Debian Reproducible)
+
+2015-02-01 Theppitak Karoonboonyanan <theppitak@gmail.com>
+
+ * configure.ac: [Belated] post-release version suffix added.
+
+2015-02-01 Theppitak Karoonboonyanan <theppitak@gmail.com>
+
+ Update my e-mail address everywhere.
+
+ * AUTHORS, configure.ac, datrie/*.[ch], tests/*.[ch],
+ tools/trietool.c:
+ - Replace all mentionings of my e-mail address with the gmail one.
+
+2015-02-01 Theppitak Karoonboonyanan <theppitak@gmail.com>
+
+ Fix binary file opening on Windows.
+
+ * datrie/trie.c (trie_new_from_file, trie_save):
+ - Add "b" to fopen() modes, so the binary file is opened properly
+ on Windows.
+
+ Thanks phongphan.p for the report and initial patch.
+
+2014-01-10 Theppitak Karoonboonyanan <thep@linux.thai.net>
+
+ * configure.ac:
+ - Bump library revision to reflect code changes.
+
+ * NEWS, configure.ac:
+ === Version 0.2.8 ===
+
+2014-01-09 Theppitak Karoonboonyanan <thep@linux.thai.net>
+
+ Improve documentation.
+
+ * datrie/triedefs.h:
+ - Refine descriptions of data types.
+ * datrie/trie.c (trie_iterator_new):
+ - Fix typo on trie_root() mentioning.
+ * datrie/trie.c (trie_store, trie_store_if_absent):
+ - Adjust wording.
+ * datrie/alpha-map.h, datrie/trie.h:
+ - Add detailed description of AlphaMap and Trie types.
+
+2014-01-08 Theppitak Karoonboonyanan <thep@linux.thai.net>
+
+ Clarify message in test_nonalpha.
+
+ * tests/test_nonalpha.c (main):
+ - Clarify message on false key duplication.
+
+2014-01-08 Theppitak Karoonboonyanan <thep@linux.thai.net>
+
+ Add test on keys with non-alphabet input chars.
+
+ * tests/Makefile.am, +tests/test_nonalpha.c:
+ - Add test to ensure that operations on keys with non-alphabet
+ input chars fail.
+
+2014-01-08 Theppitak Karoonboonyanan <thep@linux.thai.net>
+
+ Fail trie operations on non-alphabet inputs.
+
+ alpha_map_char_to_trie() tried to return TRIE_CHAR_MAX to indicate
+ out-of-range error. But this value is indeed valid in trie operations.
+ Doing so could allow false key duplication when different non-alphabet
+ chars and TRIE_CHAR_MAX itself were all mapped to TRIE_CHAR_MAX.
+ So, let's fail all trie operations on non-alphabet input chars.
+
+ * datrie/alpha-map-private.h, datrie/alpha-map.c
+ (alpha_map_char_to_trie):
+ - Make alpha_map_char_to_trie return TrieIndex type, using
+ TRIE_INDEX_MAX to indicate out-of-range error.
+ This allows TRIE_CHAR_MAX to be returned as a valid output.
+ * datrie/alpha-map.c (alpha_map_char_to_trie_str):
+ - Fail if alpha_map_char_to_trie() returns error code.
+ * datrie/trie.c (trie_retrieve, trie_store_conditionally, trie_delete,
+ trie_state_walk, trie_state_is_walkable):
+ - Check return value from alpha_map_char_to_trie() and return
+ failure status on error.
+ - Also cast TrieIndex return values to TrieChar on function calls.
+
+ Thanks Naoki Youshinaga for the suggestion.
+
+2014-01-07 Theppitak Karoonboonyanan <thep@linux.thai.net>
+
+ Check for NULL result from AlphaMap string funcs.
+
+ * datrie/trie.c (trie_store_conditionally):
+ - Return failure on NULL alpha_map_char_to_trie_str().
+
+2014-01-07 Theppitak Karoonboonyanan <thep@linux.thai.net>
+
+ Return NULL on allocation errors in AlphaMap funcs.
+
+ * datrie/alpha-map.c
+ (alpha_map_char_to_trie_str, alpha_map_trie_to_char_str):
+ - Return NULL on malloc() error.
+
+2014-01-03 Theppitak Karoonboonyanan <thep@linux.thai.net>
+
+ Fix edge case with TRIE_CHAR_MAX as TrieChar.
+
+ The trie input char with value TRIE_CHAR_MAX (255), was always
+ skipped by double-array algorithms. Let's include it.
+
+ * datrie/darray.c (da_has_children, da_output_symbols,
+ da_relocate_base, da_first_separate, da_next_separate):
+ - Include the last char in trie char iterations.
+
+ * datrie/darray.c (da_first_separate, da_next_separate):
+ - Declare characters as TrieIndex type instead of TrieChar,
+ to prevent infinite loop due to unsigned char overflow.
+
+ Thanks Naoki Youshinaga for the report, test case, and analysis.
+
+2013-10-25 Theppitak Karoonboonyanan <thep@linux.thai.net>
+
+ Fix comiler warnings in tests.
+
+ * tests/test_walk.c (main):
+ - Remove unused var i;
+ - Remove extra printf() args.
+ * tests/test_iterator.c:
+ - Add missing #include for free().
+ * tests/test_walk.c (walk_dict), tests/utils.c (dict_src):
+ - Cast string literals to (AlphaChar *) to fix signedness
+ differences.
+
+2013-10-25 Theppitak Karoonboonyanan <thep@linux.thai.net>
+
+ * configure.ac: Post-release version suffix added.
+
+2013-10-22 Theppitak Karoonboonyanan <thep@linux.thai.net>
+
+ * NEWS, configure.ac:
+ === Version 0.2.7.1 ===
+
+2013-10-21 Theppitak Karoonboonyanan <thep@linux.thai.net>
+
+ * configure.ac: Bump library versioning to reflect API addition.
+ (Change missing in previous release)
+
+2013-10-21 Theppitak Karoonboonyanan <thep@linux.thai.net>
+
+ * configure.ac: Post-release version suffix added.
+
+2013-10-21 Theppitak Karoonboonyanan <thep@linux.thai.net>
+
+ * NEWS, configure.ac:
+ === Version 0.2.7 ===
+
+2013-10-21 Theppitak Karoonboonyanan <thep@linux.thai.net>
+
+ Add missing distributed file.
+
+ * tests/Makefile.am:
+ - Add utils.h to distribution.
+
+2013-10-20 Theppitak Karoonboonyanan <thep@linux.thai.net>
+
+ Reorder tests from primitive to applied.
+
+ * tests/Makefile.am:
+ - Test walk & iterator before store-retrieve & file.
+
+2013-10-20 Theppitak Karoonboonyanan <thep@linux.thai.net>
+
+ Write a test suite for trie walk.
+
+ * tests/test_walk.c:
+ - Write test code.
+
+2013-10-18 Theppitak Karoonboonyanan <thep@linux.thai.net>
+
+ Write a test suite for trie store/retrieval.
+
+ * tests/utils.h, tests/utils.c (+dict_src_n_entries):
+ - Add function to get total entries in dict_src[].
+ * tests/test_store-retrieve.c (main):
+ - Write test code.
+
+2013-10-18 Theppitak Karoonboonyanan <thep@linux.thai.net>
+
+ Fix messages in test_iterator.
+
+ * tests/test_iterator.c (main):
+ - s/file/trie/. No file is written or read in this test.
+
+2013-10-18 Theppitak Karoonboonyanan <thep@linux.thai.net>
+
+ Skip further iteration tests if key is NULL.
+
+ * tests/test_iterator.c (main):
+ - Insert 'continue' if trie_iterator_get_key() returns NULL.
+
+2013-10-17 Theppitak Karoonboonyanan <thep@linux.thai.net>
+
+ Document availibility of alpha_char_strcmp()
+
+ * datrie/alpha-map.c (alpha_char_strcmp):
+ - Document that it's available since 0.2.7.
+
+2013-10-17 Theppitak Karoonboonyanan <thep@linux.thai.net>
+
+ Write a test for trie iterator.
+
+ * tests/test_iterator.c:
+ - Write test suite for trie iterator.
+
+2013-10-17 Theppitak Karoonboonyanan <thep@linux.thai.net>
+
+ Add skeleton test suites & a test for file I/O.
+
+ * configure.ac, Makefile.am, +tests/, +tests/Makefile.am:
+ - Add tests/ dir to the build system.
+ * +tests/utils.h, +tests/utils.c:
+ * +tests/test_file.c:
+ * +tests/test_iterator.c:
+ * +tests/test_store-retrieve.c:
+ * +tests/test_walk.c:
+ - Add skeleton for test suites.
+ * tests/utils.h, tests/utils.c, tests/test_file.c:
+ - Write test suite for file I/O.
+
+2013-10-17 Theppitak Karoonboonyanan <thep@linux.thai.net>
+
+ Add alpha_char_strcmp() API.
+
+ * datrie/alpha-map.h, datrie/alpha-map.c (+alpha_char_strcmp):
+ - Add alpha_char_strcmp() declaration & body.
+ * datrie/libdatrie.def, datrie/libdatrie.map:
+ - Add alpha_char_strcmp symbols.
+
+2013-10-16 Theppitak Karoonboonyanan <thep@linux.thai.net>
+
+ Add missing info in alpha_map_add_range() doc.
+
+ * datrie/alpha-map.c (alpha_map_add_range):
+ - Add documentation on return value.
+
+2013-09-23 Theppitak Karoonboonyanan <thep@linux.thai.net>
+
+ Fix build for Visual Studio on Windows.
+
+ * datrie/dstring.c (dstring_append, dstring_append_string,
+ dstring_append_char, dstring_terminate):
+ - Cast (void *) pointers to (char *) before calculating offsets,
+ for portability.
+
+ Thanks Gabi Davar for the report and fix (via Mikhail Korobov
+ <kmike84@gmail.com>).
+
+2013-09-23 Theppitak Karoonboonyanan <thep@linux.thai.net>
+
+ Check for doxygen required version.
+
+ * configure.ac:
+ - When doxygen-doc is enabled, also check doxygen version.
+
+2013-09-23 Theppitak Karoonboonyanan <thep@linux.thai.net>
+
+ Fix doxygen warning.
+
+ * doc/Doxyfile.in:
+ - doxygen no longer ships with the FreeSans font. Just drop it.
+
+2013-09-23 Theppitak Karoonboonyanan <thep@linux.thai.net>
+
+ Update Doxyfile.
+
+ * doc/Doxyfile.in:
+ - Updated with 'doxygen -u'.
+
+2013-09-23 Theppitak Karoonboonyanan <thep@linux.thai.net>
+
+ Fix compiler warnings.
+ * datrie/trie-string.c (trie_string_append_string):
+ * datrie/trie.c (trie_iterator_get_key):
+ - Cast strlen() args from (const TrieChar *) to (const char *),
+ to fix signedness mismatch warnings.
+
+2013-09-23 Theppitak Karoonboonyanan <thep@linux.thai.net>
+
+ Fix automake warnings.
+
+ * datrie/Makefile.am, tools/Makefile.am:
+ - Replace deprecated INCLUDES with AM_CPPFLAGS.
+
+2013-09-23 Theppitak Karoonboonyanan <thep@linux.thai.net>
+
+ * configure.ac: Post-release version suffix added.
+
+2013-01-23 Theppitak Karoonboonyanan <thep@linux.thai.net>
+
+ * NEWS, configure.ac:
+ === Version 0.2.6 ===
+
+2013-01-22 Theppitak Karoonboonyanan <thep@linux.thai.net>
+
+ Use xz compression for release tarball.
+
+ * configure.ac:
+ - Specify "dist-xz no-dist-gzip" options to AM_INIT_AUTOMAKE.
+
+2012-08-06 Theppitak Karoonboonyanan <thep@linux.thai.net>
+
+ Improve AlphaMap range merging.
+
+ * datrie/alpha-map.c (alpha_map_add_range):
+ - Also try to merge adjacent ranges. Otherwise, adding one by one
+ character will result in linear search on alphabet set.
+
+ Thanks Mikhail Korobov <kmike84@gmail.com> for the report.
+
+2012-08-05 Theppitak Karoonboonyanan <thep@linux.thai.net>
+
+ Migrate trie_enumerate() to the new TrieIterator.
+
+ This improves performance by 10%, and recursion stacks are also
+ eliminated.
+
+ * datrie/trie.c (trie_enumerate):
+ - Replace da_enumerate() call with TrieIterator loop.
+ * datrie/trie.c (-trie_da_enum_func, -_TrieEnumData):
+ * datrie/darray.h, datrie/darray.c
+ (-da_enumerate, -da_get_transition_key, -DAEnumFunc,
+ -da_enumerate_recursive):
+ - Drop now-unused codes.
+
+2012-08-05 Theppitak Karoonboonyanan <thep@linux.thai.net>
+
+ Optimize key calculation for TrieIterator.
+
+ * datrie/Makefile.am +datrie/dstring.h +datrie/dstring-private.h
+ +datrie/dstring.c +datrie/trie-string.h +datrie/trie-string.c:
+ - Add dynamic string classes DString and TrieString.
+ * datrie/trie.c:
+ - (TrieIterator): Add "key" dynamic trie string member for
+ incrementally gathering the key while iterating.
+ - Initialize "key" member to NULL on construction. Only allocate and
+ free it on branching root states.
+ * datrie/darray.h, datrie/darray.c
+ (da_first_separate, da_next_separate):
+ - Instead of allocating memory for return string, accept a dynamic
+ string object and update it while traversing.
+ * datrie/trie.c (trie_iterator_next):
+ - For branching state, create the "key" dynamic string object on
+ first iteration and pass it to da_first_separate() and
+ da_next_separate() along the iterations.
+ * datrie/trie.c (trie_iterator_get_key):
+ - Replace the total key reconstruction by da_get_transition_key()
+ with simple string catenation of the dynamic "key" and the suffix
+ string.
+ * datrie/darray.h, datrie/darray.c (da_get_transition_key):
+ - Adjust to use dynamic string instead of total allocation.
+ * datrie/darray.c (da_enumerate_recursive):
+ - Adjust the da_get_transition_key() call accordingly.
+
+ Thanks Mikhail Korobov <kmike84@gmail.com> for the suggested approach
+ and for profiling check.
+
+2012-07-31 Theppitak Karoonboonyanan <thep@linux.thai.net>
+
+ Add TrieIterator and its operations.
+
+ * datrie/trie.h, datrie/trie.c
+ (+trie_iterator_new, +trie_iterator_free, +trie_iterator_next,
+ +trie_iterator_get_key, +trie_iterator_get_data):
+ - Add TrieIterator class and its methods.
+ * datrie/libdatrie.def, datrie/libdatrie.map:
+ - Add the new export symbols.
+ * datrie/darray.h, datrie/darray.c
+ (da_get_state_key -> da_get_transition_key):
+ - Adjust da_get_state_key() from getting transition key from root
+ to getting from arbitrary ancestor.
+ * datrie/darray.h, datrie/darray.c
+ (+da_first_separate, +da_next_separate):
+ - Add internal functions for iterating from one separate node to
+ another in double-array structure.
+
+ Thanks Mikhail Korobov <kmike84@gmail.com> for the use case suggestion.
+
+2012-07-30 Theppitak Karoonboonyanan <thep@linux.thai.net>
+
+ * doc/Doxyfile.in: Upgrade to doxygen 1.8.1.2 format.
+
+2012-07-29 Theppitak Karoonboonyanan <thep@linux.thai.net>
+
+ * datrie/trie.c: Reformat source.
+
+2012-07-29 Theppitak Karoonboonyanan <thep@linux.thai.net>
+
+ * datrie/trie.h, datrie/trie.c (trie_state_walkable_chars):
+ Reformat source.
+
+2012-07-27 Theppitak Karoonboonyanan <thep@linux.thai.net>
+
+ Add new API trie_state_walkable_chars() to allow breadth-first
+ traversal.
+
+ * datrie/darray.h, datrie/darray.c:
+ - Move da_output_symbols() to darray.h, to be called by the new
+ function.
+ - Move the Symbols class to darray.h, as required by
+ da_output_symbols().
+ * datrie/trie.h, datrie/trie.c (+trie_state_walkable_chars):
+ - Add the new public function.
+ * datrie/libdatrie.map, datrie/libdatrie.def:
+ - Add the new symbol to export maps.
+ * configure.ac:
+ - Update library versioning to reflect API addition.
+
+2012-07-26 Theppitak Karoonboonyanan <thep@linux.thai.net>
+
+ * darray/darray.c (da_has_children): Accept (const DArray *) arg.
+
+2012-07-26 Theppitak Karoonboonyanan <thep@linux.thai.net>
+
+ * datrie/darray.c (da_has_children, da_output_symbols,
+ da_relocate_base):
+ Calculate max_c candidate using num_cells - base instead of
+ TRIE_INDEX_MAX - base, to prevent more unnecessary loops.
+
+2012-07-26 Theppitak Karoonboonyanan <thep@linux.thai.net>
+
+ * datrie/trie.c (trie_state_get_data):
+ Check if the state is leaf, not just suffix, before getting data.
+
+ Thanks Mikhail Korobov <kmike84@gmail.com> for the report.
+
+2012-07-25 Theppitak Karoonboonyanan <thep@linux.thai.net>
+
+ * datrie/tail.h, datrie/tail.c:
+ * datrie/alpha-map.c:
+ * datrie/trie.h, datrie/trie.c:
+ * datrie/darray.c: Remove trailing spaces.
+
+2012-07-13 Theppitak Karoonboonyanan <thep@linux.thai.net>
+
+ * datrie/tail.c (tail_get_suffix): Fix function documentation.
+
+ Thanks Mikhail Korobov <kmike84@gmail.com> for the report.
+
+2012-07-13 Theppitak Karoonboonyanan <thep@linux.thai.net>
+
+ * datrie/darray.c, datrie/tail.c:
+ - Don't include <stdint.h> when compiled with MSVC, as the header is
+ missing there, and SIZE_MAX is provided in some other header.
+
+ Thanks Mikhail Korobov <kmike84@gmail.com> for the report.
+
+2012-07-13 Theppitak Karoonboonyanan <thep@linux.thai.net>
+
+ * configure.ac: Post-release version suffix added.
+
2011-11-04 Theppitak Karoonboonyanan <thep@linux.thai.net>
* NEWS, configure.ac: