1
2# Change Log
3
4All notable changes to this project will be documented in this file.
5This project adheres to [Semantic Versioning](https://semver.org/).
6
7## [unreleased] -
8
9### Added
10
11### Changed
12
13### Fixed
14
15
16## [2.17.2] - 2021-12-16
17
18### Changed
19
20* Libosmium now supports being compiled in C++17 and C++20 mode. The minimum
21  version required is still C++11, but if you use libosmium in an C++17 or
22  C++20 application this should work properly.
23* Switch from catch version 1 to catch2 as test framework.
24* When `std::variant` is available (C++17 and above), libosmium will use that
25  instead of `boost::variant` reducing the dependencies a little bit.
26* Removed various workaround that were needed for older MSVC compilers.
27* Remove use of `boost::filter_iterator` and `boost::indirect_iterator`. The
28  removes the dependency on Boost Iterator.
29* Examples now mostly use the somewhat cleaner `return` instead of
30  `std::exit()` to return an exit code from `main`.
31* As always: Various small code cleanups.
32
33### Fixed
34
35* When ordering OSM objects (mostly use in the `CheckOrder` handler), the
36  smallest id possible (`INTMIN`) wasn't sorted correctly.
37* Threading problem when reading files.
38* Possible dereference of invalid iterator in legacy area assembler. This
39  only affects the legacy area assembler that takes old-style multipolygons
40  into account, so modern code that is not working with history data is not
41  affected.
42* Fixed read from an empty queue when reading a file which could block
43  libosmium forever when an error was encountered while reading a file.
44
45### Deprecated
46
47Several parts of libosmium have been marked deprecated, many of them for a very
48long time. These will not be part of the next version of libosmium:
49
50* Sparsehash index class `osmium::index::map::SparseMemTable` as well as the
51  complete file `osmium/index/map/sparse_mem_table.hpp`.
52* Callback functionality of the `osmium::memory::Buffer` class. The
53  `set_full_callback()` will not be available any more. See the source
54  for replacement options.
55* Various `osmium::builder::build_*` functions in
56  `osmium/builder/builder_helper.hpp`. Use `osmium::builder::add_*`
57  functions instead. Removes `builder_helper.hpp`.
58* `osmium::builder::Builder::add_item(const osmium::memory::Item* item)`.
59  Use the function of the same name taking a reference instead.
60* `osmium::builder::OSMObject/ChangesetBuilder::add_user()`. Use
61  `set_user()` instead.
62* `osmium::builder::ChangesetBuilder::bounds()` returning a modifiable
63  reference. Use `set_bounds()` instead.
64* Several functions around `osmium::io::OutputIterator`.
65* `osmium::Area::inner_ring_cbegin/cend()`, use `inner_rings()` instead.
66* `osmium::RelationMember::ref()`, use `set_ref()` instead.
67* Implicit conversion from `osmium::Timestamp` to `std::time_t`. Use
68  `seconds_since_epoch()` instead.
69* `osmium::string_to_user_id()`, use `string_to_uid` instead.
70* `osmium::static_cast_with_assert()` helper functions as well as the
71  complete include file `osmium/util/cast.hpp`.
72* Some constructors of `osmium::util::MemoryMapping` and
73  `osmium::util::TypedMemoryMapping`. Use other constructor instead.
74
75
76## [2.17.1] - 2021-10-05
77
78### Added
79
80* Add `osmium_tags_filter` example showing use of tags filter.
81* Add `Writer::set_header()` function to set header after constructing.
82
83### Changed
84
85* Various improvements in PBF file reading make it slightly faster and less
86  CPU intensive.
87* Since 2.17.0 Osmium will, when reading files, tell the kernel using
88  `fadvise` that it can remove pages from the buffer cache that are not
89  needed any more. This is usually beneficial, because the memory can be used
90  for something else. But if you are reading the same OSM file multiple times
91  at the same time or in short succession, it might be better to keep those
92  buffer pages. In that case you can set the environment variable
93  `OSMIUM_CLEAN_PAGE_CACHE_AFTER_READ` to `no` and Osmium will not call
94  `fadvise`. Set it to `yes` or anything else (or not set it at all) to get
95  the default behaviour.
96* If the macro `OSMIUM_DEFINE_EXPORT` is defined, all exception classes used
97  by Osmium will get "tagged as exported" using `__declspec(dllexport)` when
98  using MSVC or `__attribute__ ((visibility("default")))` on other compilers.
99  This is needed in PyOsmium.
100
101### Fixed
102
103* Fix integer parser. IDs in OPL files can now be anything between -2^63 and
104  2^63-1.
105
106
107## [2.17.0] - 2021-04-26
108
109### Added
110
111* Add "ids" output format. New IDS output format that is similar to
112  the OPL format, but only the entity type and id is written out.
113* Add convenience functions `left()`, `right()`, `top()`, `bottom()` to
114  access `osmium::Box` boundaries.
115* Add polygon output to WKB factory.
116* Add functions to access storage from `node_locations_for_ways`
117  handler.
118* Add flag `osmium::io::buffers_type` for telling the `Reader` class whether
119  you want buffers read to only contain a single type of OSM entity.
120* Add convenient named `nodes()`, `ways()`, and `relations()` accessor
121  functions to `nwr_array` class.
122* Add `DeltaDecode::value()` accessor function.
123* Add variant of the `Buffer::purge_removed()` function which doesn't take
124  a callback parameter.
125
126### Changed
127
128* Different varint decoding for faster PBF decoding. This makes PBF
129  decoding about 15% faster.
130* Several code optimmizations in (PBF) writer code that speed up
131  writing of OSM files considerably while using less CPU and spreading
132  the load on multiple CPUs.
133* Use memset/memcpy instead of `std::fill_n` and `std::copy` in object
134  builder for some slight speedups.
135* Ignore metadata setting on reader for history/change files. History
136  and change files must be read with metadata, because otherwise the
137  information is lost whether an object is visible or deleted. So
138  ignore this setting in that case.
139* On Linux: Use fadvise() to tell kernel about our reading patterns:
140  1. Tell kernel that we are reading OSM files sequentially. This
141     should improve pre-fetching of data blocks.
142  2. Tell kernel that we are done with block so they can be released.
143     This means we don't hog the buffer cache for something that
144     will, in all likelyhood, not be needed any more.
145* Use assert() instead of exception in "can not happen" situation in
146  the relations manager code.
147* Various code cleanups.
148
149### Fixed
150
151* Test failure with `add_tag_list` on some systems.
152* Test framework fix for aarch64 architecture.
153* Remove undefined behaviour in bzip2 compression code.
154* Rename some local variables to not shadow member functions.
155* Wrap `osmium::util::MemoryMapping::unmap()` in try/catch on Windows
156  also because we call this from a noexcept function.
157* Removed superfluous `std::forward`s and fixed code that called
158  `std::forward` multiple times on the same object.
159* Fix in OPL parser which could lead to invalid data being generated.
160* Fixed three bugs in O5M parser which could lead to an infinit loop
161  or segmentation faults.
162
163## [2.16.0] - 2021-01-08
164
165### Added
166
167* The PBF reader and writer now understand PBF blobs compressed with the LZ4
168  compression algorithm in addition to the usual ZLIB compression (or no
169  compression at all). LZ4 is much faster to compress and uncompress. Use
170  by setting the `pbf_compression` output file format option to `lz4`. You
171  have to define `OSMIUM_WITH_LZ4` to enable this before including any
172  libosmium includes.
173* The function `osmium::io::supported_pbf_compression_types` can now be used
174  to get a list of all PBF compression types supported.
175* The output file option `pbf_compression_level` can now be set to an integer.
176  The range depends on the compression type used, 0-9 for zlib compression
177  and 1-65537 for lz4 compression.
178* Adds `ptr_begin()`/`ptr_end()` functions to `ObjectPointerCollection` for
179  accessing the pointers instead of the underlying objects.
180
181### Changed
182
183* The `osmium::io::Writer::close()` function now returns the number of bytes
184  written to an OSM file if it is available (and 0 otherwise).
185* Use stable sort when sorting `ObjectPointerCollection`.
186
187### Fixed
188
189* Various small fixes and cleanups.
190
191
192## [2.15.6] - 2020-06-27
193
194### Added
195
196* Add `IdSetSmall::merge_sorted` function.
197
198### Changed
199
200* Little optimization for IdSetSmall: Don't add the same id twice in a row.
201
202### Fixed
203
204* Do not build areas with "recursion depth > 20". This happens when there
205  are complex multipolygon with many rings touching in single points. This
206  is a quick fix that hopefully keeps us going until we find a better
207  solution.
208
209## [2.15.5] - 2020-04-21
210
211### Added
212
213* Additional constructor for `builder::attr::member_type(_string)` taking
214  char type making it even easier to generate test data.
215* Allow single C string or `std::string` as argument for `builder::attr::_tag`.
216  Must contain key and value separated by the equal sign.
217* New `builder::attr::_t()` function to set tags from comma-separated string.
218* New `nwr_array` iterator.
219* Support for the PROJ library has now been declared deprecated. The old
220  PROJ API (up to version PROJ 6) is currently still available, but will
221  be removed in a future version. Support for the new PROJ API will not be
222  in libosmium. See https://github.com/osmcode/osmium-proj for some code
223  that might help you if you need this.
224
225### Changed
226
227* Check how much space is available in file system before resizing memory
228  mapped file (not on Windows). This means we can, at least in some cases,
229  show an error message instead of crashing the program.
230
231### Fixed
232
233* Parsing coordinates in PBF files did not work correctly if an lat/lon
234  offset was specified (which almost never happens).
235* Make OPL parser more strict: Attributes can only be specified once.
236* Do not close stdout after writing OSM file to it.
237
238## [2.15.4] - 2019-11-28
239
240### Added
241
242* Add osmium::Options::empty() for consistency with STL containers.
243
244### Fixed
245
246* Massive reduction of memory consumption in area assembly code. For some
247  very complex polygons memory usage can drop from multiple gigabytes to just
248  megabytes.
249
250## [2.15.3] - 2019-09-16
251
252### Added
253
254* New header option "sorting" when reading and writing PBFs. If the header
255  option "sorting" is set to `Type_then_ID`, the optional header property
256  `Sort.Type_then_ID` is set on writing to PBF files. When reading PBF files
257  with this header property, the "sorting" header option is set accordingly.
258
259### Fixed
260
261* Do not propagate C++ exception through C code. We are using the Expat
262  XML parser, a C library. It calls callbacks in our code. When those
263  callbacks throw, the exception was propagated through the C code. This
264  did work in the tests, but that behaviour isn't guaranteed (C++
265  standard says it is implementation defined). This fixes it by catching
266  the exception and rethrowing it later.
267
268## [2.15.2] - 2019-08-16
269
270### Added
271
272* Instead of handler classes, the `apply` function can now also take
273  lambdas (or objects from classes implementing `operator()`).
274* Add swap, copy constructor and assignment operator to IdSetDense.
275
276### Changed
277
278* Enable use of the old proj API in proj version 6. This is a stopgap
279  solution until we find a better one.
280* Better error messages when there is an error parsing a timestamp.
281* Cleaned up a lot of code based on clang-tidy warnings.
282* Ignore <bbox> or <bounds> subelement of <way> or <relation>. <bounds>
283  elements are created by Overpass API as subelements of ways or relations
284  when the "out bb" format is used. <bbox> subelements turn up in files
285  downloaded from http://download.openstreetmap.fr/replication . Libosmium
286  used to throw an error  like "Unknown element in <way>: bbox". With this
287  commit, these subelements are ignored, ie. there is no error any more,
288  but the data is not read.
289* Add swap, copy constructor and assignment operator to IdSetDense.
290* Update included catch.hpp to 1.12.2.
291* Retire use of `OSMIUM_NORETURN` macro. Use `[[noreturn]]` instead.
292
293### Fixed
294
295* Do not build areas with more than 100 locations where rings touch.
296  Places where rings touch are unusual for normal multipolygons and the
297  algorithm in libosmium that assembles multipolygons does not handle
298  them well. If there are too many touching points it becomes very slow.
299  This is not a problem for almost all multipolygons. As I am writing
300  this there are only three relations in the OSM database with more than
301  100 touching points, all of them rather weird boundaries in the US.
302  With this commit libosmium will simply ignore those areas to keep the
303  processing speed within reasonable bounds.
304
305
306## [2.15.1] - 2019-02-26
307
308### Added
309
310* More tests.
311* CMake config: also find clang-tidy-7.
312
313### Changed
314
315* Example and benchmark programs now don't crash with exceptions any more
316  but report them properly.
317
318### Fixed
319
320* Compile with NDEBUG in RelWithDebInfo mode.
321* Correctly throw exception in `multimap::dump_as_list()`.
322* Integer truncation on 32 bit systems in `MemoryUsage`.
323* Exception specification on some functions.
324* Forwarding references that might have hidden copy/move constructors.
325
326
327## [2.15.0] - 2018-12-07
328
329### Added
330
331* Function `dump_as_array()` to dump sparse array indexes.
332* Set the `xml_josm_upload` header option when reading XML files.
333* New function `OSMObject::remove_tags()` marks tags on OSM objects as
334  removed.
335* More tests.
336
337### Changed
338
339* When reading OSM files Libosmium now has less memory overhead, especially
340  when reading PBF files. This works by using more, but smaller buffers.
341* The `TagsFilter` class is now based on the `TagsFilterBase` template
342  class which allows setting the result type. This allows the filter to
343  return more data depending on the rule that matched.
344* Use enums for many constants instead of (static) const(expr) variables.
345* Make `chunk_bits` in `IdSetDense` configurable.
346* Hardcode `%lld` format instead of using `<cinttypes>` PRI macro.
347* Update included gdalcpp to version 1.2.0.
348
349### Fixed
350
351* The gzip/bzip2 compression code was overhauled and is better tested now.
352  This fixes some bugs on Windows.
353
354
355## [2.14.2] - 2018-07-23
356
357### Fixed
358
359* PBF reader and writer depended on byte order of system architecture.
360* Removed an unreliable test that didn't work on some architectures.
361
362
363## [2.14.1] - 2018-07-23
364
365### Changed
366
367* Libosmium now needs the newest Protozero version 1.6.3.
368* Removes dependency on the utfcpp library for conversions between Unicode
369  code points and UTF-8. We have our own functions for this now. This also
370  gives us more control on where errors are thrown in this code.
371* Add support for using the CRC32 implementation from the zlib library in
372  addition to the one from Boost. It is significantly faster and means we
373  have one less dependency, because zlib is needed anyway in almost all
374  programs using Osmium due to its use in the PBF format. Set macro
375  `OSMIUM_TEST_CRC_USE_BOOST` before compiling the tests, if you want to
376  run the tests with the boost library code, otherwise it will use the
377  zlib code. Note that to use this you have to change your software slightly,
378  see the documentation of the `CRC_zlib` class for details.
379* Add a `clear_user()` function to OSMObject and Changeset which allows
380  removing the user name of an entity without re-creating it in a new buffer.
381* In Osmium the 0 value of the Timestamp is used to denote the "invalid"
382  Timestamp, and its output using the `to_iso()` function is the empty
383  string. But this is the wrong output for OSM XML files, where a
384  timestamp that's not set should still be output as
385  1970-01-01T00:00:00Z. This version introduces a new `to_is_all()`
386  function which will do this and uses that function in the XML writer.
387* Use `protozero::byteswap_inplace` instead of `htonl`/`ntohl`. Makes the
388  code simpler and also works on Windows.
389* Marked `MultipolygonCollector` class as deprecated. Use the
390  `MultipolygonManager` class introduced in 2.13.0 instead.
391* Lots of code cleanups especially around `assert`s. Libosmium checks out
392  clean with `clang-tidy` now. Some documentation updates.
393
394### Fixed
395
396* Fix compilation error when `fileno()` is a macro (as in OpenBSD 6.3).
397* Make `Box` output consistent with the output of a single `Location`
398  and avoids problems with some locales.
399
400
401## [2.14.0] - 2018-03-31
402
403### Added
404
405* Add `ReaderWithProgressBar` class. This wraps an `osmium::io::Reader` and an
406  `osmium::ProgressBar` into a nice little package allowing easier use in the
407  common case.
408* Add polygon implementation for WKT and GeoJSON geometry factories. (Thanks
409  to Horace Williams.)
410* Various tests.
411
412### Changed
413
414* Add git submodule with `osm-testdata` repository. Before this the repository
415  had to be installed externally. Now a submodule update can be used to get the
416  correct version of the osm-testdata repository.
417* The XML file reader was rewritten to be more strict. Cases where it could
418  be tricked into failing badly were removed. There are now more tests for the
419  XML parser.
420* Replaced `strftime` by our own implementation. Uses a specialized
421  implementation for our use case instead the more general `strftime`.
422  Benchmarked this to be faster.
423* Changed the way IDs are parsed from strings. No asserts are used any more but
424  checks are done and an exception is thrown when IDs are out of range. This
425  also changes the way negative values are handled. The value `-1` is now
426  always accepted for all IDs and returned as `0`. This deprecates the
427  `string_to_user_id()` function, use `string_to_uid()` instead which returns a
428  different type.
429* It was always a bit confusing that some of the util classes and functions are
430  directly in the `osmium` namespace and some are in `osmium::util`. The
431  `osmium::util` namespace is now declared `inline`. which allows all util
432  classes and functions to be addressed directly in the `osmium` namespace
433  while keeping backwards compatibility.
434* An error is now thrown when the deprecated `pbf_add_metadata` file format
435  option is used. Use `add_metadata` instead.
436* Extended the `add_metadata` file format option. In addition to allowing the
437  values `true`, `yes`, `false`, and `no`, the new values `all` and `none`
438  are now recognized. The option can also be set to a list of attributes
439  separated by the `+` sign. Attributes are `version`, `timestamp`,
440  `changeset`, `uid`, and `user`. All output formats have been updated to
441  only output the specified attributes. This is based on the new
442  `osmium::metadata_options` class which stores information about what metadata
443  an `OSMObject` has or should have. (Thanks to Michael Reichert.)
444* The `<` (less than) operator on `OSMObject`s now ignores the case when
445  one or both of the timestamps on the objects are not set at all. This
446  allows better handling of OSM data files with reduced metadata.
447* Allow `version = -1` and `changeset = -1` in PBF input. This value is
448  sometimes used by other programs to denote "no value". Osmium uses the `0`
449  for this.
450* The example programs using the `getopt_long` function have been rewritten to
451  work without it. This makes using libosmium on Windows easier, where this
452  function is not available.
453* Removed the embedded protozero from repository. Like other dependencies you
454  have to install protozero first. If you check out the protozero repository
455  in the same directory where you checked out libosmium, libosmium's CMake
456  will find it.
457* Various code cleanups, fixing of include order, etc.
458* Remove need for `winsock2` library in Windows by using code from Protozero.
459  (Thanks alex85k.)
460* Add MSYS2 build to Appveyor and fixed some Windows compile issues. (Thanks
461  to alex85k.)
462* Use array instead of map to store input/output format creators.
463* Update included `catch.hpp` to version 1.12.1.
464
465### Fixed
466
467* Remove check for lost ways in multipolygon assembler. This rules out too many
468  valid multipolygons, more specifically more complex ones with touching inner
469  rings.
470* Use different macro magic for registering index maps. This allows the maps
471  to be used for several types at the same time.
472* Lots of code was rewritten to fix warnings reported by `clang-tidy` making
473  libosmium more robust.
474* Make ADL work for `begin()`/`end()` of `InputIterator<Reader>`.
475* Various fixes to make the code more robust, including an undefined behaviour
476  in the debug output format and a buffer overflow in the o5m parser.
477* Range checks in o5m parser throw exceptions now instead of triggering
478  assertions.
479* Better checking that PBF data is in range.
480* Check `read` and `write` system calls for `EINTR`.
481* Use tag and type from protozero to make PBF parser more robust.
482* Test `testdata-multipolygon` on Windows was using the wrong executable name.
483
484
485## [2.13.1] - 2017-08-25
486
487### Added
488
489- New "blackhole" file format which throws away all data written into it.
490  Used for benchmarking.
491
492### Changed
493
494- When reading OPL files, CRLF file endings are now handled correctly.
495- Reduce the max number of threads allowed for the `Pool` to 32. This should
496  still be plenty and might help with test failures on some architectures.
497
498### Fixed
499
500- Tests now run correctly independent of git `core.autocrlf` setting.
501- Set binary mode for all files on Windows in example code.
502- Low-level file functions now set an invalid parameter handler on Windows
503  to properly handle errors.
504- Restore earlier behaviour allowing zero-length mmap. It is important to
505  allow zero-length memory mapping, because it is possible that such an index
506  is empty, for instance when one type of object is missing from an input
507  file as in https://github.com/osmcode/osmium-tool/issues/65. Drawback is
508  that files must be opened read-write for this to work, even if we only
509  want to read from them.
510- Use Approx() to compare floating point values in tests.
511- Fix broken `Item` test on 32 bit platforms.
512
513
514## [2.13.0] - 2017-08-15
515
516### Added
517
518- New `RelationsManager` class superseeds the `relations::Collector` class.
519  The new class is much more modular and easier to extend. If you are using
520  the Collector class, you are encouraged to switch.
521- New `MultipolygonManager` based on the `RelationsManager` class superseeds
522  the `MultipolygonCollector` class. The examples have been changed to use the
523  new class and all users are encouraged to switch. There is also a
524  `MultipolygonManagerLegacy` class if you still need old-style multipolygon
525  support (see below).
526- New `FlexMem` index class that works with input files of any size and
527  stores the index in memory. This should now be used as the default index
528  for node location stores. Several example programs now use this index.
529- New `CallbackBuffer` class, basically a convenient wrapper around the
530  `Buffer` class with an additional callback function that is called whenever
531  the buffer is full.
532- Introduce new `ItemStash` class for storing OSM objects in memory.
533- New `osmium::geom::overlaps()` function to check if two `Box` objects
534  overlap.
535- Add function `IdSet::used_memory()` to get estimate of memory used in the
536  set.
537- New `is_defined()` and `is_undefined()` methods on `Location` class.
538- Tests for all provided example programs. (Some tests currently fail
539  on Windows for the `osmium_index_lookup` program.)
540
541### Changed
542
543- The area `Assembler` now doesn't work with old-style multipolygons (those
544  are multipolygon relations with the tags on the outer ways(s) instead of
545  on the relation) any more. Because old-style multipolygons are now (mostly)
546  gone from the OSM database this is usually what you want. The new
547  `AssemblerLegacy` class can be used if you actually need support for
548  old-style multipolygons, for instance if you are working with historical
549  data. (In that case you also need to use the `MultipolygonManagerLegacy`
550  class instead of the `MultipolygonManager` class.)
551- Changes for consistent ordering of OSM data: OSM data can come in any order,
552  but usual OSM files are ordered by type, ID, and version. These changes
553  extend this ordering to negative IDs which are sometimes used for objects
554  that have not been uploaded to the OSM server yet. The negative IDs are
555  ordered now before the positive ones, both in order of their absolute value.
556  This is the same ordering as JOSM uses.
557- Multipolygon assembler now checks for three or more overlapping segments
558  which are always an error and can report them.
559- Enable use of user-provided `thread::Pool` instances in `Reader` and
560  `Writer` for special use cases.
561- Growing a `Buffer` will now work with any capacity parameter, it is
562  always rounded up for proper alignment. Buffer constructor with three
563  arguments will now check that commmitted is not larger than capacity.
564- Updated embedded protozero to 1.5.2.
565- Update version of Catch unit test framework to 1.9.7.
566- And, as always, lots of small code cleanups and more tests.
567
568### Fixed
569
570- Buffers larger than 2^32 bytes do now work.
571- Output coordinate with value of -2^31 correctly.
572- Changeset comments with more than 2^16 characters are now allowed. The new
573  maximum size is 2^32.
574- `ChangesetDiscussionBuilder::add_comment_text()` could fail silently instead
575  of throwing an exception.
576- Changeset bounding boxes are now always output to OSM files (any format)
577  if at least one of the corners is defined. This is needed to handle broken
578  data from the main OSM database which contains such cases. The OPL reader
579  has also been fixed to handle this case.
580- In the example `osmium_location_cache_create`, the index file written is
581  always truncated first.
582
583
584## [2.12.2] - 2017-05-03
585
586### Added
587
588- Add two argument (key, value) overload of `TagMatcher::operator()`.
589
590### Changed
591
592- Detect, report, and remove duplicate ways in multipolygon relations.
593- Change EOF behaviour of Reader: The `Reader::read()` function will now
594  always return an invalid buffer exactly once to signal EOF.
595- Update QGIS multipolygon project that is part of the test suite to show
596  more problem types.
597- Copy multipolygon QGIS file for tests to build dir in cmake step.
598- Some code cleanups and improved debug output in multipolygon code.
599- Refactor I/O code to simplify code.
600- Disable some warnings on MSVC.
601- Various small code and build script changes.
602
603### Fixed
604
605- Two bugs in area assembler affecting very complex multipolygons and
606  multipolygons with overlapping or nearly overlapping lines.
607- Invalid use of iterators leading to undefined behaviour in area assembler
608  code.
609- Area assembler stats were not correctly counting inner rings that are
610  areas in their own right.
611- Fix a thread problem valgrind found that might or might not be real.
612- Read OPL file correctly even if trailing newline in file is missing.
613- Include order for `osmium/index/map` headers and
614  `osmium/index/node_locations_map.hpp` (or
615  `osmium/handler/node_locations_for_ways.hpp`) doesn't matter any more.
616
617
618## [2.12.1] - 2017-04-10
619
620### Added
621
622- New `TagsFilter::set_default_result()` function.
623
624### Changed
625
626- Use larger capacity for `Buffer` if necessary for alignment instead of
627  throwing an exception. Minimum buffer size is now 64 bytes.
628- Check order of input data in relations collector. The relations collector
629  can not deal with history data or a changes file. This was documented as a
630  requirement, but often lead to problems, because this was ignored by users.
631  So it now checks that the input data it gets is ordered and throws an
632  exception otherwise.
633- When writing an OSM file, set generator to libosmium if not set by app.
634
635### Fixed
636
637- Infinite loop in `Buffer::reserve_space()`. (Issue #202.)
638- `ObjectPointerCollection::unique()` now removes elements at end.
639- Tests comparing double using `==` operator.
640- Build on Cygwin.
641
642
643## [2.12.0] - 2017-03-07
644
645### Added
646
647- `TagMatcher` and `TagsFilter` classes for more flexibly matching tags and
648  selecting objects based on tags. This obsoletes the less flexible classes
649  based on `osmium::tags::Filter` classes.
650- Extended `index::RelationsMap(Stash|Index)` classes to also allow
651  parent-to-member lookups.
652- New `nrw_array` helper class.
653- `ObjectPointerCollection::unique()` function.
654
655### Changed
656
657- Area assembler can now detect invalid locations and report them in the
658  stats and through the problem reporter. If the new config option
659  `ignore_invalid_locations` is set, the Assembler will pretend they weren't
660  even referenced in the ways. (Issue #195.)
661- `osmium::area::Assembler::operator()` will now return a boolean reporting
662  whether building of the area(s) was successful.
663- Split up area `Assembler` class into three classes: The
664  `detail::BasicAssembler` is now the parent class. `Assembler` is the child
665  class for usual use. The new `GeomAssembler` also derives from
666  `BasicAssembler` and builds areas without taking tags into account at all.
667  This is to support osm2pgsql which does tag handling itself. (Issue #194.)
668- The `Projection` class can do any projection supported by the Proj.4
669  library. As a special case it now uses our own Mercator projection
670  functions when the web mercator projection (EPSG 3857) is used. This is
671  much faster than going through Proj.4.
672- Better error messages for low-level file utility functions.
673- Mark `build_tag_list*` functions in `builder_helper.hpp` as deprecated. You
674  should use the functions from `osmium/builder/attr.hpp` instead.
675- Improved performance of the `osmium::tags::match_(any|all|none)_of`
676  functions.
677- Improved performance of string comparison in `tags::Filter`.
678- Update version of Catch unit test framework to 1.8.1. This meant some
679  tests had to be updated.
680- Use `get_noexcept()` in `NodeLocationsForWays` handler.
681- And lots of code and test cleanups...
682
683### Fixed
684
685- Terminate called on full non-auto-growing buffer. (Issue #189.)
686- When file formats were used that were not compiled into the binary, it
687  terminated instead of throwing. (Issue #197.)
688- Windows build problem related to including two different winsock versions.
689- Windows build problem related to forced build for old Windows versions.
690  (Issue #196.)
691- Clear stream contents in ProblemReporterException correctly.
692- Add `-pthread` compiler and linker options on Linux/OSX. This should fix
693  a problem where some linker versions will not link binaries correctly when
694  the `--as-needed` option is used.
695- The `Filter::count()` method didn't compile at all.
696- XML reader doesn't fail on relation member ref=0 any more.
697
698
699## [2.11.0] - 2017-01-14
700
701### Added
702
703- New index::RelationsMap(Stash|Index) classes implementing an index for
704  looking up parent relation IDs given a member relation ID.
705- Add `get_noexcept()` method to all index maps. For cases where ids are
706  often not in the index using this can speed up a program considerably.
707- New non-const WayNodeList::operator[].
708- Default constructed "invalid" Coordinates.
709- Tile constructor from web mercator coordinates and some helper
710  functions for tile arithmetic.
711- Tag matcher matching keys using a regex.
712- New `envelope()` functions on `NodeRefList`, `Way`, and `Area` returning a
713  `Box` object with the geometric envelope of the object.
714- Add `amenity_list` example.
715
716### Changed
717
718- Replaced the implementation for the web mercator projection using the usual
719  tan-formula with a polynomial approximation which is much faster and good
720  enough for OSM data which only has ~1cm resolution anyway. See
721  https://github.com/osmcode/mercator-projection for all the details and
722  benchmarks. You can disable this by defining the macro
723  `OSMIUM_USE_SLOW_MERCATOR_PROJECTION` before including any of the Osmium
724  headers.
725- Removed the outdated `Makefile`. Always use CMake directly to build.
726- Refactoring of `osmium::apply()` removing the resursive templates for faster
727  compile times and allowing rvalue handlers.
728- Lots of code and test cleanups and more documentation.
729
730### Fixed
731
732- Handle endianess on FreeBSD properly.
733- Fixed doxygen config for reproducible builds.
734
735
736## [2.10.3] - 2016-11-20
737
738### Changed
739
740- Round out ObjectPointerCollection implementation and test it.
741- Updated embedded protozero to 1.4.5.
742
743
744## [2.10.2] - 2016-11-16
745
746### Changed
747
748- Updated embedded protozero to 1.4.4.
749
750### Fixed
751
752- Buffer overflow in osmium::Buffer.
753
754
755## [2.10.1] - 2016-11-15
756
757### Changed
758
759- Updated embedded protozero to 1.4.3.
760
761### Fixed
762
763- Made IdSet work on 32bit systems.
764- Fixed endianness check for WKB tests.
765
766
767## [2.10.0] - 2016-11-11
768
769### Added
770
771- The `Reader` can take an additional optional `read_meta` flag. If this is
772  set to false the PBF input will ignore metadata on OSM objects (like version,
773  timestamp, uid, ...) which speeds up file reading by 10 to 20%.
774- New `IdSet` virtual class with two implementations: `IdSetDense` and
775  `IdSetSmall`. Used to efficiently store a set of Ids. This is often needed
776  to track, for instance, which nodes are needed for ways, etc.
777- Added more examples and better documented existing examples.
778- Add a benchmark "mercator" converting all node locations in a file to
779  WebMercator and creating geometries in WKB format.
780
781### Changed
782
783- Better queue handling makes I/O faster in some circumstances.
784- The `FindOsmium.cmake` CMake script can now check a current enough libosmium
785  version is found.
786- Builders can now be constructed with a reference to parent builder.
787- Made builders more robust by adding asserts that will catch common usage
788  problems.
789- Calling `OSMObjectBuilder::add_user()` is now optional, and the method was
790  renamed to `set_user()`. (`add_user()` is marked as deprecated.)
791- Benchmarks now show compiler and compiler options used.
792- `Builder::add_item()` now takes a reference instead of pointer (old version
793  of the function marked as deprecated).
794- GEOS support is deprecated. It does not work any more for GEOS 3.6 or newer.
795  Reason is the changed interface in GEOS 3.6. If there is interest for the
796  GEOS support, we can add support back in later (but probably using the
797  GEOS C API which is more stable than the C++ API). Some tests using GEOS
798  were rewritten to work without it.
799- The `BoolVector` has been deprecated in favour of the new `IdSet` classes.
800- Lots of code cleanups and improved API documentation in many places.
801- The relations collector can now tell you whether a relation member was in
802  the input data. See the new `is_available()` and
803  `get_availability_and_offset()` methods.
804- Updated embedded Catch unit test header to version 1.5.8.
805
806### Fixed
807
808- Parsing of coordinates starting with decimal dot and coordinates in
809  scientific notation.
810- `~` operator for `entity_bits` doesn't set unused bits any more.
811- Progress bar can now be (temporarily) removed, to allow other output.
812
813
814## [2.9.0] - 2016-09-15
815
816### Added
817
818- Support for reading OPL files.
819- For diff output OSM objects in buffers can be marked as only in one or the
820  other file. The OPL and debug output formats support diff output based on
821  this.
822- Add documentation and range checks to `Tile` struct.
823- More documentation.
824- More examples and more extensive comments on examples.
825- Support for a progress report in `osmium::io::Reader()` and a `ProgressBar`
826  utility class to use it.
827- New `OSMObject::set_timestamp(const char*)` function.
828
829### Changed
830
831- Parse coordinates in scientific notations ourselves.
832- Updated included protozero version to 1.4.2.
833- Lots of one-argument constructors are now explicit.
834- Timestamp parser now uses our own implementation instead of strptime.
835  This is faster and independant of locale settings.
836- More cases of invalid areas with duplicate segments are reported as
837  errors.
838
839### Fixed
840
841- Fixed a problem limiting cache file sizes on Windows to 32 bit.
842- Fixed includes.
843- Exception messages for invalid areas do not report "area contains no rings"
844  any more, but "invalid area".
845
846
847## [2.8.0] - 2016-08-04
848
849### Added
850
851- EWKT support.
852- Track `pop` type calls and queue underruns when `OSMIUM_DEBUG_QUEUE_SIZE`
853  environment variable is set.
854
855### Changed
856
857- Switched to newest protozero v1.4.0. This should deliver some speedups
858  when parsing PBF files. This also removes the DeltaEncodeIterator class,
859  which isn't needed any more.
860- Uses `std::unordered_map` instead of `std::map` in PBF string table code
861  speeding up writing of PBF files considerably.
862- Uses less memory when writing PBF files (smaller string table by default).
863- Removes dependency on sparsehash and boost program options libraries for
864  examples.
865- Cleaned up threaded queue code.
866
867### Fixed
868
869- A potentially very bad bug was fixed: When there are many and/or long strings
870  in tag keys and values and/or user names and/or relation roles, the string
871  table inside a PBF block would overflow. I have never seen this happen for
872  normal OSM data, but that doesn't mean it can't happen. The result is that
873  the strings will all be mixed up, keys for values, values for user names or
874  whatever.
875- Automatically set correct SRID when creating WKB and GEOS geometries.
876  Note that this changes the behaviour of libosmium when creating GEOS
877  geometries. Before we created them with -1 as SRID unless set otherwise.
878  Manual setting of the SRID on the GEOSGeometryFactory is now deprecated.
879- Allow coordinates of nodes in scientific notation when reading XML files.
880  This shouldn't be used really, but sometimes you can find them.
881
882
883## [2.7.2] - 2016-06-08
884
885### Changed
886
887- Much faster output of OSM files in XML, OPL, or debug formats.
888
889### Fixed
890
891- Parsing and output of coordinates now faster and always uses decimal dot
892  independant of locale setting.
893- Do not output empty discussion elements in changeset XML output.
894- Data corruption regression in mmap based indexes.
895
896
897## [2.7.1] - 2016-06-01
898
899### Fixes
900
901- Update version number in version.hpp.
902
903
904## [2.7.0] - 2016-06-01
905
906### Added
907
908- New functions for iterating over specific item types in buffers
909  (`osmium::memory::Buffer::select()`), over specific subitems
910  (`osmium::OSMObject::subitems()`), and for iterating over all rings of
911  an area (`osmium::Areas::outer_rings()`, `inner_rings()`).
912- Debug output optionally prints CRC32 when `add_crc32` file option is set.
913
914### Changed
915
916- XML parser will not allow any XML entities which are usually not used in OSM
917  files anyway. This can help avoiding DOS attacks.
918- Removed SortedQueue implementation which was never used.
919- Also incorporate Locations in NodeRefs into CRC32 checksums. This means
920  all checksums will be different compared to earlier versions of libosmium.
921- The completely new algorithm for assembling multipolygons is much faster,
922  has better error reporting, generates statistics and can build more complex
923  multipolygons correctly. The ProblemReporter classes have changed to make
924  this happen, if you have written your own, you have to fix it.
925- Sparse node location stores are now only sorted if needed, ie. when nodes
926  come in unordered.
927
928### Fixed
929
930- Output operator for Location shows full precision.
931- Undefined behaviour in WKB writer and `types_from_string()` function.
932- Fix unsigned overflow in pool.hpp.
933- OSM objects are now ordered by type (nodes, then ways, then relations),
934  then ID, then version, then timestamp. Ordering by timestamp is normally
935  not necessary, because there can't be two objects with same type, ID, and
936  version but different timestamp. But this can happen when diffs are
937  created from OSM extracts, so we check for this here. This change also
938  makes sure IDs are always ordered by absolute IDs, positives first, so
939  order is 0, 1, -1, 2, -2, ...
940- Data corruption bug fixed in disk based indexes (used for the node
941  location store for instance). This only affected you, if you created
942  and index, closed it, and re-opened it (possibly in a different process)
943  and if there were missing nodes. If you looked up those nodes, you got
944  location (0,0) back instead of an error.
945- Memory corruption bug showing up with GDAL 2.
946
947
948## [2.6.1] - 2016-02-22
949
950### Added
951
952- Add `WITH_PROFILING` option to CMake config. When enabled, this sets the
953  `-fno-omit-frame-pointer` compiler option.
954
955### Changed
956
957- Massive speed improvements when building multipolygons.
958- Uses (and includes) new version 1.3.0 of protozero library.
959- Removed dependency on Boost Iterator for PBF writer.
960- Example program `osmium_area_test` now uses `cerr` instead of `cout` for
961  debug output.
962
963
964## [2.6.0] - 2016-02-04
965
966### Added
967
968- The new handler osmium::handler::CheckOrder can be used to check that a
969  file is properly ordered.
970- Add new method to build OSM nodes, ways, relations, changesets, and areas
971  in buffers that wraps the older Builder classes. The new code is much easier
972  to use and very flexible. There is no documentation yet, but the tests in
973  `test/t/builder/test_attr.cpp` can give you an idea how it works.
974- Add util class to get memory usage of current process on Linux.
975
976### Changed
977
978- New Buffer memory management speeds up Buffer use, because it doesn't clear
979  the memory unnecessarily.
980
981### Fixed
982
983- osmium::Box::extend() function now ignores invalid locations.
984- Install of external library headers.
985- Check way has at least one node before calling `is_closed()` in area
986  assembler.
987- Declaration/definition of some friend functions was in the wrong namespace.
988
989
990## [2.5.4] - 2015-12-03
991
992### Changed
993
994- Included gdalcpp.hpp header was updated to version 1.1.1.
995- Included protozero library was updated to version 1.2.3.
996- Workarounds for missing constexpr support in Visual Studio removed. All
997  constexpr features we need are supported now.
998- Some code cleanup after running clang-tidy on the code.
999- Re-added `Buffer::value_type` typedef. Turns out it is needed when using
1000  `std::back_inserter` on the Buffer.
1001
1002### Fixed
1003
1004- Bugs with Timestamp code on 32 bit platforms. This necessitated
1005  some changes in Timestamp which might lead to changes in user
1006  code.
1007- Bug in segment intersection code (which appeared on i686 platform).
1008
1009
1010## [2.5.3] - 2015-11-17
1011
1012### Added
1013
1014- `osmium::make_diff_iterator()` helper function.
1015
1016### Changed
1017
1018- Deprecated `osmium::Buffer::set_full_callback()`.
1019- Removed DataFile class which was never used anywhere.
1020- Removed unused and obscure `Buffer::value_type` typedef.
1021
1022### Fixed
1023
1024- Possible overrun in Buffer when using the full-callback.
1025- Incorrect swapping of Buffer.
1026
1027
1028## [2.5.2] - 2015-11-06
1029
1030# Fixed
1031
1032- Writing data through an OutputIterator was extremly slow due to
1033  lock contention.
1034
1035
1036## [2.5.1] - 2015-11-05
1037
1038### Added
1039
1040- Header `osmium/fwd.hpp` with forward declarations of the most commonly
1041  used Osmium classes.
1042
1043### Changed
1044
1045- Moved `osmium/io/overwrite.hpp` to `osmium/io/writer_options.hpp`
1046  If you still include the old file, you'll get a warning.
1047
1048
1049## [2.5.0] - 2015-11-04
1050
1051### Added
1052
1053- Helper functions to make input iterator ranges and output iterators.
1054- Add support for reading o5m and o5c files.
1055- Option for osmium::io::Writer to fsync file after writing.
1056- Lots of internal asserts() and other robustness checks.
1057
1058### Changed
1059
1060- Updated included protozero library to version 1.2.0.
1061- Complete overhaul of the I/O system making it much more robust against
1062  wrong data and failures during I/O operations.
1063- Speed up PBF writing by running parts of it in parallel.
1064- OutputIterator doesn't hold an internal buffer any more, but it uses
1065  one in Writer. Calling flush() on the OutputIterator isn't needed any
1066  more.
1067- Reader now throws when trying to read after eof or an error.
1068- I/O functions that used to throw `std::runtime_error` now throw
1069  `osmium::io_error` or derived.
1070- Optional parameters on `osmium::io::Writer` now work in any order.
1071
1072### Fixed
1073
1074- PBF reader now decodes locations of invisible nodes properly.
1075- Invalid Delta encode iterator dereference.
1076- Lots of includes fixed to include (only) what's used.
1077- Dangling reference in area assembly code.
1078
1079
1080## [2.4.1] - 2015-08-29
1081
1082### Fixed
1083
1084- CRC calculation of tags and changesets.
1085
1086
1087## [2.4.0] - 2015-08-29
1088
1089### Added
1090
1091- Checks that user names, member roles and tag keys and values are not longer
1092  than 256 * 4 bytes. That is the maximum length 256 Unicode characters
1093  can have in UTF-8 encoding.
1094- Support for GDAL 2. GDAL 1 still works.
1095
1096### Changed
1097
1098- Improved CMake build scripts.
1099- Updated internal version of Protozero to 1.1.0.
1100- Removed `toogr*` examples. They are in their own repository now.
1101  See https://github.com/osmcode/osm-gis-export.
1102- Files about to be memory-mapped (for instance index files) are now set
1103  to binary mode on Windows so the application doesn't have to do this.
1104
1105### Fixed
1106
1107- Hanging program when trying to open file with an unknown file format.
1108- Building problems with old boost versions.
1109- Initialization errors in PBF writer.
1110- Bug in byte swap code.
1111- Output on Windows now always uses binary mode, even when writing to
1112  stdout, so OSM xml and opl files always use LF line endings.
1113
1114
1115## [2.3.0] - 2015-08-18
1116
1117### Added
1118
1119- Allow instantiating osmium::geom::GEOSFactory with existing GEOS factory.
1120- Low-level functions to support generating a architecture- and endian-
1121  independant CRC from OSM data. This is intended to be uses with boost::crc.
1122- Add new debug output format. This format is not intended to be read
1123  automatically, but for human consumption. It formats the data nicely.
1124- Make writing of metadata configurable for XML and OPL output (use
1125  `add_metadata=false` as file option).
1126
1127### Changed
1128
1129- Changed `add_user()` and `add_role()` in builders to use string length
1130  without the 0-termination.
1131- Improved code setting file format from suffix/format argument.
1132- Memory mapping utility class now supports readonly, private writable or
1133  shared writable operation.
1134- Allow empty version (0) in PBF files.
1135- Use utf8cpp header-only lib instead of boost for utf8 decoding. The library
1136  is included in the libosmium distribution.
1137- New PBF reader and writer based on the protozero. A complete rewrite of the
1138  code for reading and writing OSM PBF files. It doesn't use the Google
1139  protobuf library and it doesn't use the OSMPBF/OSM-Binary library any more.
1140  Instead is uses the protozero lightweight protobuf header library which is
1141  included in the code. Not only does the new code have less dependencies, it
1142  is faster and more robust. https://github.com/mapbox/protozero
1143
1144### Fixed
1145
1146- Various smaller bug fixes.
1147- Add encoding for relation member roles in OPL format.
1148- Change character encoding to new format in OPL: variable length hex code
1149  between % characters instead of a % followed by 4-digit hex code. This is
1150  necessary because unicode characters can be longer than the 4-digit hex
1151  code.
1152- XML writer: The linefeed, carriage return, and tab characters are now
1153  escaped properly.
1154- Reading large XML files could block.
1155
1156## [2.2.0] - 2015-07-04
1157
1158### Added
1159
1160- Conversion functions for some low-level types.
1161- BoolVector index class.
1162- `min_op`/`max_op` utility functions.
1163- More tests here and there.
1164- Helper methods `is_between()` and `is_visible_at()` to DiffObject.
1165- GeoJSON factory using the RapidJSON library.
1166- Support for tile calculations.
1167- Create simple polygons from ways in geom factories.
1168- `MemoryMapping` and `TypedMemoryMapping` helper classes.
1169- `close()` function to `mmap_vector_base` class.
1170- Function on `Buffer` class to get iterator to specific offset.
1171- Explicit cast operator from `osmium::Timestamp` to `uint32_t`.
1172
1173### Changed
1174
1175- Throw exception on illegal values in functions parsing strings to get ids,
1176  versions, etc.
1177- Improved error message for geometry exceptions.
1178
1179### Fixed
1180
1181- Throw exception from `dump_as_array()` and `dump_as_list()` functions if not
1182  implemented in an index.
1183- After writing OSM files, program could stall up to a second.
1184- Dense location store was written out only partially.
1185- Use `uint64_t` as counter in benchmarks, so there can be no overflows.
1186- Example programs now read packed XML files, too.
1187- Refactoring of memory mapping code. Removes leak on Windows.
1188- Better check for invalid locations.
1189- Mark `cbegin()` and `cend()` of `mmap_vector_base` as const functions.
1190
1191## [2.1.0] - 2015-03-31
1192
1193### Added
1194
1195- When writing PBF files, sorting the PBF stringtables is now optional.
1196- More tests and documentation.
1197
1198### Changed
1199
1200- Some functions are now declared `noexcept`.
1201- XML parser fails now if the top-level element is not `osm` or `osmChange`.
1202
1203### Fixed
1204
1205- Race condition in PBF reader.
1206- Multipolygon collector was accessing non-existent NodeRef.
1207- Doxygen documentation wan't showing all classes/functions due to a bug in
1208  Doxygen (up to version 1.8.8). This version contains a workaround to fix
1209  this.
1210
1211[unreleased]: https://github.com/osmcode/libosmium/compare/v2.17.2...HEAD
1212[2.17.2]: https://github.com/osmcode/libosmium/compare/v2.17.1...v2.17.2
1213[2.17.1]: https://github.com/osmcode/libosmium/compare/v2.17.0...v2.17.1
1214[2.17.0]: https://github.com/osmcode/libosmium/compare/v2.16.0...v2.17.0
1215[2.16.0]: https://github.com/osmcode/libosmium/compare/v2.15.6...v2.16.0
1216[2.15.6]: https://github.com/osmcode/libosmium/compare/v2.15.5...v2.15.6
1217[2.15.5]: https://github.com/osmcode/libosmium/compare/v2.15.4...v2.15.5
1218[2.15.4]: https://github.com/osmcode/libosmium/compare/v2.15.3...v2.15.4
1219[2.15.3]: https://github.com/osmcode/libosmium/compare/v2.15.2...v2.15.3
1220[2.15.2]: https://github.com/osmcode/libosmium/compare/v2.15.1...v2.15.2
1221[2.15.1]: https://github.com/osmcode/libosmium/compare/v2.15.0...v2.15.1
1222[2.15.0]: https://github.com/osmcode/libosmium/compare/v2.14.2...v2.15.0
1223[2.14.2]: https://github.com/osmcode/libosmium/compare/v2.14.1...v2.14.2
1224[2.14.1]: https://github.com/osmcode/libosmium/compare/v2.14.0...v2.14.1
1225[2.14.0]: https://github.com/osmcode/libosmium/compare/v2.13.1...v2.14.0
1226[2.13.1]: https://github.com/osmcode/libosmium/compare/v2.13.0...v2.13.1
1227[2.13.0]: https://github.com/osmcode/libosmium/compare/v2.12.2...v2.13.0
1228[2.12.2]: https://github.com/osmcode/libosmium/compare/v2.12.1...v2.12.2
1229[2.12.1]: https://github.com/osmcode/libosmium/compare/v2.12.0...v2.12.1
1230[2.12.0]: https://github.com/osmcode/libosmium/compare/v2.11.0...v2.12.0
1231[2.11.0]: https://github.com/osmcode/libosmium/compare/v2.10.3...v2.11.0
1232[2.10.3]: https://github.com/osmcode/libosmium/compare/v2.10.2...v2.10.3
1233[2.10.2]: https://github.com/osmcode/libosmium/compare/v2.10.1...v2.10.2
1234[2.10.1]: https://github.com/osmcode/libosmium/compare/v2.10.0...v2.10.1
1235[2.10.0]: https://github.com/osmcode/libosmium/compare/v2.9.0...v2.10.0
1236[2.9.0]: https://github.com/osmcode/libosmium/compare/v2.8.0...v2.9.0
1237[2.8.0]: https://github.com/osmcode/libosmium/compare/v2.7.2...v2.8.0
1238[2.7.2]: https://github.com/osmcode/libosmium/compare/v2.7.1...v2.7.2
1239[2.7.1]: https://github.com/osmcode/libosmium/compare/v2.7.0...v2.7.1
1240[2.7.0]: https://github.com/osmcode/libosmium/compare/v2.6.1...v2.7.0
1241[2.6.1]: https://github.com/osmcode/libosmium/compare/v2.6.0...v2.6.1
1242[2.6.0]: https://github.com/osmcode/libosmium/compare/v2.5.4...v2.6.0
1243[2.5.4]: https://github.com/osmcode/libosmium/compare/v2.5.3...v2.5.4
1244[2.5.3]: https://github.com/osmcode/libosmium/compare/v2.5.2...v2.5.3
1245[2.5.2]: https://github.com/osmcode/libosmium/compare/v2.5.1...v2.5.2
1246[2.5.1]: https://github.com/osmcode/libosmium/compare/v2.5.0...v2.5.1
1247[2.5.0]: https://github.com/osmcode/libosmium/compare/v2.4.1...v2.5.0
1248[2.4.1]: https://github.com/osmcode/libosmium/compare/v2.4.0...v2.4.1
1249[2.4.0]: https://github.com/osmcode/libosmium/compare/v2.3.0...v2.4.0
1250[2.3.0]: https://github.com/osmcode/libosmium/compare/v2.2.0...v2.3.0
1251[2.2.0]: https://github.com/osmcode/libosmium/compare/v2.1.0...v2.2.0
1252[2.1.0]: https://github.com/osmcode/libosmium/compare/v2.0.0...v2.1.0
1253
1254