This is an automated email from the git hooks/post-receive script. sebastic pushed a commit to branch master in repository libosmium.
commit c62edf156e516064cba66f41dd03c4cd90c7d5be Author: Bas Couwenberg <sebas...@xs4all.nl> Date: Thu Nov 5 23:40:25 2015 +0100 Imported Upstream version 2.5.1 --- CHANGELOG.md | 26 ++++++++++- CMakeLists.txt | 30 ++++++++++-- CONTRIBUTING.md | 47 +++++++++++-------- README.md | 12 +++-- include/osmium/area/multipolygon_collector.hpp | 2 +- include/osmium/builder/builder.hpp | 4 +- include/osmium/builder/osm_object_builder.hpp | 4 +- include/osmium/diff_iterator.hpp | 2 +- include/osmium/diff_visitor.hpp | 12 ++--- include/osmium/dynamic_handler.hpp | 21 ++++----- include/osmium/experimental/flex_reader.hpp | 2 +- include/osmium/{io/overwrite.hpp => fwd.hpp} | 54 +++++++++++++--------- include/osmium/geom/factory.hpp | 14 +++--- include/osmium/geom/geojson.hpp | 2 +- include/osmium/geom/geos.hpp | 2 +- include/osmium/geom/ogr.hpp | 2 +- include/osmium/geom/rapid_geojson.hpp | 4 +- include/osmium/geom/wkb.hpp | 2 +- include/osmium/geom/wkt.hpp | 2 +- include/osmium/handler.hpp | 15 +----- include/osmium/handler/chain.hpp | 10 ++-- include/osmium/handler/node_locations_for_ways.hpp | 2 +- include/osmium/index/detail/create_map_with_fd.hpp | 2 +- include/osmium/index/detail/vector_map.hpp | 2 +- include/osmium/io/bzip2_compression.hpp | 2 +- include/osmium/io/compression.hpp | 2 +- include/osmium/io/detail/queue_util.hpp | 8 ++-- include/osmium/io/detail/read_write.hpp | 2 +- include/osmium/io/detail/xml_input_format.hpp | 2 +- include/osmium/io/gzip_compression.hpp | 2 +- include/osmium/io/input_iterator.hpp | 6 +-- include/osmium/io/output_iterator.hpp | 23 +++------ include/osmium/io/overwrite.hpp | 25 +--------- include/osmium/io/writer.hpp | 29 ++++++------ .../io/{overwrite.hpp => writer_options.hpp} | 6 +-- include/osmium/memory/buffer.hpp | 26 +++++------ include/osmium/memory/collection.hpp | 4 +- include/osmium/memory/item.hpp | 4 +- include/osmium/memory/item_iterator.hpp | 6 +-- include/osmium/object_pointer_collection.hpp | 2 +- include/osmium/osm/changeset.hpp | 4 +- include/osmium/osm/crc.hpp | 2 +- include/osmium/osm/diff_object.hpp | 7 +-- include/osmium/osm/entity.hpp | 2 +- include/osmium/osm/node.hpp | 2 +- include/osmium/osm/object.hpp | 16 +++---- include/osmium/osm/relation.hpp | 4 +- include/osmium/osm/tag.hpp | 2 +- include/osmium/osm/way.hpp | 2 +- include/osmium/relations/collector.hpp | 10 ++-- include/osmium/relations/detail/member_meta.hpp | 2 +- include/osmium/tags/filter.hpp | 8 ++-- include/osmium/tags/taglist.hpp | 6 +-- include/osmium/thread/util.hpp | 4 +- include/osmium/util/compatibility.hpp | 9 ++++ include/osmium/visitor.hpp | 26 +++++------ 56 files changed, 282 insertions(+), 248 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d5081c6..715280f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,28 @@ This project adheres to [Semantic Versioning](http://semver.org/). ### Added +### Changed + +### Fixed + + +## [2.5.1] - 2015-11-05 + +### Added + +- Header `osmium/fwd.hpp` with forward declarations of the most commonly + used Osmium classes. + +### Changed + +- Moved `osmium/io/overwrite.hpp` to `osmium/io/writer_options.hpp` + If you still include the old file, you'll get a warning. + + +## [2.5.0] - 2015-11-04 + +### Added + - Helper functions to make input iterator ranges and output iterators. - Add support for reading o5m and o5c files. - Option for osmium::io::Writer to fsync file after writing. @@ -166,7 +188,9 @@ This project adheres to [Semantic Versioning](http://semver.org/). Doxygen (up to version 1.8.8). This version contains a workaround to fix this. -[unreleased]: https://github.com/osmcode/libosmium/compare/v2.4.1...HEAD +[unreleased]: https://github.com/osmcode/libosmium/compare/v2.5.1...HEAD +[2.5.1]: https://github.com/osmcode/libosmium/compare/v2.5.0...v2.5.1 +[2.5.0]: https://github.com/osmcode/libosmium/compare/v2.4.1...v2.5.0 [2.4.1]: https://github.com/osmcode/libosmium/compare/v2.4.0...v2.4.1 [2.4.0]: https://github.com/osmcode/libosmium/compare/v2.3.0...v2.4.0 [2.3.0]: https://github.com/osmcode/libosmium/compare/v2.2.0...v2.3.0 diff --git a/CMakeLists.txt b/CMakeLists.txt index da60fad..4382311 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -27,7 +27,7 @@ project(libosmium) set(LIBOSMIUM_VERSION_MAJOR 2) set(LIBOSMIUM_VERSION_MINOR 5) -set(LIBOSMIUM_VERSION_PATCH 0) +set(LIBOSMIUM_VERSION_PATCH 1) set(LIBOSMIUM_VERSION "${LIBOSMIUM_VERSION_MAJOR}.${LIBOSMIUM_VERSION_MINOR}.${LIBOSMIUM_VERSION_PATCH}") @@ -54,6 +54,10 @@ option(BUILD_HEADERS "compile every header file on its own" ${dev_build}) option(BUILD_BENCHMARKS "compile benchmark programs" ${dev_build}) option(BUILD_DATA_TESTS "compile data tests, please run them with ctest" ${dev_build}) +option(INSTALL_GDALCPP "also install gdalcpp headers" OFF) +option(INSTALL_PROTOZERO "also install protozero headers" OFF) +option(INSTALL_UTFCPP "also install utfcpp headers" OFF) + #----------------------------------------------------------------------------- # @@ -353,11 +357,29 @@ if(BUILD_HEADERS) endforeach() endif() + +#----------------------------------------------------------------------------- +# +# Installation +# +# External libraries are only installed if the options are set in case they +# are installed from somewhere else. +# +#----------------------------------------------------------------------------- install(DIRECTORY include/osmium DESTINATION include) -# We only have a copy of this file so we can use older boost versions which -# don't have it. We probably don't want to install it. -#install(FILES include/boost_unicode_iterator.hpp DESTINATION include) +if(INSTALL_GDALCPP) + install(include/gdalcpp.hpp DESTINATION include) +endif() + +if(INSTALL_PROTOZERO) + install(DIRECTORY include/protozero DESTINATION include) +endif() + +if(INSTALL_UTFCPP) + install(include/utf8.hpp DESTINATION include) + install(DIRECTORY include/utf8 DESTINATION include) +endif() #----------------------------------------------------------------------------- diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 323c847..1064b94 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -36,22 +36,21 @@ different. * Class names begin with uppercase chars and use CamelCase. Smaller helper classes are usually defined as struct and have lowercase names. * Macros (and only macros) are all uppercase. Use macros sparingly, usually - a constexpr is better. + a simple (maybe constexpr) inline function is better. Undef macros after use + if possible. +* Macros should only be used for controlling which parts of the code should be + included when compiling or to avoid major code repetitions. * Variables, attributes, and function names are lowercase with `underscores_between_words`. * Class attribute names start with `m_` (member). -* Template parameters are single uppercase letters or start with uppercase `T` - and use CamelCase. -* Typedefs have `names_like_this_type` which end in `_type`. -* Macros should only be used for controlling which parts of the code should be - included when compiling. * Use `descriptive_variable_names`, exceptions are well-established conventions like `i` for a loop variable. Iterators are usually called `it`. * Declare variables where they are first used (C++ style), not at the beginning of a function (old C style). * Names from external namespaces (even `std`) are always mentioned explicitly. Do not use `using` (except for `std::swap`). This way we can't even by - accident pollute the namespace of the code including Osmium. + accident pollute the namespace of the code using Osmium. +* Always use the standard swap idiom: `using std::swap; swap(foo, bar);`. * `#include` directives appear in three "blocks" after the copyright notice. The blocks are separated by blank lines. First block contains `#include`s for standard C/C++ includes, second block for any external libs used, third @@ -64,8 +63,20 @@ different. * All files have suffix `.hpp`. * Closing } of all classes and namespaces should have a trailing comment with the name of the class/namespace. -* All constructors with one or more arguments should be declared "explicit" - unless there is a reason for them not to be. Document that reason. +* All constructors with one (or more arguments if they have a default) should + be declared "explicit" unless there is a reason for them not to be. Document + that reason. +* If a class has any of the special methods (copy/move constructor/assigment, + destructor) it should have all of them, possibly marking them as default or + deleted. +* Typedefs have `names_like_this_type` which end in `_type`. Typedefs should + use the new `using foo_type = bar` syntax instead of the old + `typedef bar foo_type`. +* Template parameters are single uppercase letters or start with uppercase `T` + and use CamelCase. +* Always use `typename` in templates, not `class`: `template <typename T>`. +* The ellipsis in variadic template never has a space to the left of it and + always has a space to the right: `template <typename... TArgs>` etc. Keep to the indentation and other styles used in the code. Use `make indent` in the toplevel directory to fix indentation and styling. It calls `astyle` @@ -81,15 +92,15 @@ about which compilers support which feature and what operating system versions or distributions have which versions of these compilers installed. GCC 4.6 - too old, not supported (Ubuntu 12.04 LTS) -GCC 4.7.2 - can probably not be supported (Debian wheezy/stable) -GCC 4.7.3 - works -GCC 4.8 - works -clang 3.0 - too old, not supported (Debian wheezy/stable, Ubuntu 12.04 LTS) -clang 3.2 - works - -C++11 features you should not use: -* Inherited Constructors (works only in GCC 4.8+ and clang 3.3+, not in Visual - Studio) +GCC 4.7.2 - can probably not be supported (Debian wheezy) +GCC 4.7.3 - probably works +GCC 4.8 - works and is supported from here on +clang 3.0 - too old, not supported (Debian wheezy, Ubuntu 12.04 LTS) +clang 3.2 - probably works +clang 3.5 - works and is supported from here on + +Use `include/osmium/util/compatibility.hpp` if there are compatibility problems +between compilers due to different C++11 support. ## Checking your code diff --git a/README.md b/README.md index 9ac5a70..68fc2f6 100644 --- a/README.md +++ b/README.md @@ -27,9 +27,15 @@ you need for your programs. For details see the [list of dependencies](https://github.com/osmcode/libosmium/wiki/Libosmium-dependencies). -The [protozero](https://github.com/mapbox/protozero) and -[utf8-cpp](http://utfcpp.sourceforge.net/) header-only libraries are included -in the libosmium repository. +The following external (header-only) libraries are included in the libosmium +repository: +* [gdalcpp](https://github.com/joto/gdalcpp) +* [protozero](https://github.com/mapbox/protozero) +* [utfcpp](http://utfcpp.sourceforge.net/) + +If you want (some of) those libraries to be installed along with libosmium +itself when calling `make install`, you have to use the CMake options +`INSTALL_GDALCPP`, `INSTALL_PROTOZERO`, and/or `INSTALL_UTFCPP`. ## Directories diff --git a/include/osmium/area/multipolygon_collector.hpp b/include/osmium/area/multipolygon_collector.hpp index 6761ec6..c4155db 100644 --- a/include/osmium/area/multipolygon_collector.hpp +++ b/include/osmium/area/multipolygon_collector.hpp @@ -71,7 +71,7 @@ namespace osmium { * * @tparam TAssembler Multipolygon Assembler class. */ - template <class TAssembler> + template <typename TAssembler> class MultipolygonCollector : public osmium::relations::Collector<MultipolygonCollector<TAssembler>, false, true, false> { typedef typename osmium::relations::Collector<MultipolygonCollector<TAssembler>, false, true, false> collector_type; diff --git a/include/osmium/builder/builder.hpp b/include/osmium/builder/builder.hpp index 4424d88..63eb4bb 100644 --- a/include/osmium/builder/builder.hpp +++ b/include/osmium/builder/builder.hpp @@ -134,7 +134,7 @@ namespace osmium { * Reserve space for an object of class T in buffer and return * pointer to it. */ - template <class T> + template <typename T> T* reserve_space_for() { assert(m_buffer.is_aligned()); return reinterpret_cast<T*>(m_buffer.reserve_space(sizeof(T))); @@ -182,7 +182,7 @@ namespace osmium { }; // class Builder - template <class TItem> + template <typename TItem> class ObjectBuilder : public Builder { static_assert(std::is_base_of<osmium::memory::Item, TItem>::value, "ObjectBuilder can only build objects derived from osmium::memory::Item"); diff --git a/include/osmium/builder/osm_object_builder.hpp b/include/osmium/builder/osm_object_builder.hpp index 343f51f..6aa43ac 100644 --- a/include/osmium/builder/osm_object_builder.hpp +++ b/include/osmium/builder/osm_object_builder.hpp @@ -125,7 +125,7 @@ namespace osmium { }; // class TagListBuilder - template <class T> + template <typename T> class NodeRefListBuilder : public ObjectBuilder<T> { public: @@ -296,7 +296,7 @@ namespace osmium { }; // class ChangesetDiscussionBuilder - template <class T> + template <typename T> class OSMObjectBuilder : public ObjectBuilder<T> { public: diff --git a/include/osmium/diff_iterator.hpp b/include/osmium/diff_iterator.hpp index 0ddf7ff..4ee67f7 100644 --- a/include/osmium/diff_iterator.hpp +++ b/include/osmium/diff_iterator.hpp @@ -43,7 +43,7 @@ namespace osmium { class OSMObject; - template <class TBasicIterator> + template <typename TBasicIterator> class DiffIterator : public std::iterator<std::input_iterator_tag, const osmium::DiffObject> { static_assert(std::is_base_of<osmium::OSMObject, typename TBasicIterator::value_type>::value, "TBasicIterator::value_type must derive from osmium::OSMObject"); diff --git a/include/osmium/diff_visitor.hpp b/include/osmium/diff_visitor.hpp index 5e72a7b..e7dc576 100644 --- a/include/osmium/diff_visitor.hpp +++ b/include/osmium/diff_visitor.hpp @@ -43,7 +43,7 @@ namespace osmium { namespace detail { - template <class THandler> + template <typename THandler> inline void apply_diff_iterator_recurse(const osmium::DiffObject& diff, THandler& handler) { switch (diff.type()) { case osmium::item_type::node: @@ -60,7 +60,7 @@ namespace osmium { } } - template <class THandler, class ...TRest> + template <typename THandler, typename... TRest> inline void apply_diff_iterator_recurse(const osmium::DiffObject& diff, THandler& handler, TRest&... more) { apply_diff_iterator_recurse(diff, handler); apply_diff_iterator_recurse(diff, more...); @@ -68,7 +68,7 @@ namespace osmium { } // namespace detail - template <class TIterator, class ...THandlers> + template <typename TIterator, typename... THandlers> inline void apply_diff(TIterator it, TIterator end, THandlers&... handlers) { typedef osmium::DiffIterator<TIterator> diff_iterator; @@ -82,19 +82,19 @@ namespace osmium { class OSMObject; - template <class TSource, class ...THandlers> + template <typename TSource, typename... THandlers> inline void apply_diff(TSource& source, THandlers&... handlers) { apply_diff(osmium::io::InputIterator<TSource, osmium::OSMObject> {source}, osmium::io::InputIterator<TSource, osmium::OSMObject> {}, handlers...); } - template <class ...THandlers> + template <typename... THandlers> inline void apply_diff(osmium::memory::Buffer& buffer, THandlers&... handlers) { apply_diff(buffer.begin(), buffer.end(), handlers...); } - template <class ...THandlers> + template <typename... THandlers> inline void apply_diff(const osmium::memory::Buffer& buffer, THandlers&... handlers) { apply_diff(buffer.cbegin(), buffer.cend(), handlers...); } diff --git a/include/osmium/dynamic_handler.hpp b/include/osmium/dynamic_handler.hpp index 9d0bd66..39baba5 100644 --- a/include/osmium/dynamic_handler.hpp +++ b/include/osmium/dynamic_handler.hpp @@ -36,16 +36,11 @@ DEALINGS IN THE SOFTWARE. #include <memory> #include <utility> +#include <osmium/fwd.hpp> #include <osmium/handler.hpp> namespace osmium { - class Node; - class Way; - class Relation; - class Area; - class Changeset; - namespace handler { namespace detail { @@ -83,11 +78,11 @@ namespace osmium { // to either call handler style functions or visitor style operator(). #define OSMIUM_DYNAMIC_HANDLER_DISPATCH(_name_, _type_) \ -template <class THandler> \ +template <typename THandler> \ auto _name_##_dispatch(THandler& handler, const osmium::_type_& object, int) -> decltype(handler._name_(object), void()) { \ handler._name_(object); \ } \ -template <class THandler> \ +template <typename THandler> \ auto _name_##_dispatch(THandler& handler, const osmium::_type_& object, long) -> decltype(handler(object), void()) { \ handler(object); \ } @@ -98,22 +93,22 @@ auto _name_##_dispatch(THandler& handler, const osmium::_type_& object, long) -> OSMIUM_DYNAMIC_HANDLER_DISPATCH(changeset, Changeset) OSMIUM_DYNAMIC_HANDLER_DISPATCH(area, Area) - template <class THandler> + template <typename THandler> auto flush_dispatch(THandler& handler, int) -> decltype(handler.flush(), void()) { handler.flush(); } - template <class THandler> + template <typename THandler> void flush_dispatch(THandler&, long) {} - template <class THandler> + template <typename THandler> class HandlerWrapper : public HandlerWrapperBase { THandler m_handler; public: - template <class... TArgs> + template <typename... TArgs> HandlerWrapper(TArgs&&... args) : m_handler(std::forward<TArgs>(args)...) { } @@ -157,7 +152,7 @@ auto _name_##_dispatch(THandler& handler, const osmium::_type_& object, long) -> m_impl(impl_ptr(new osmium::handler::detail::HandlerWrapperBase)) { } - template <class THandler, class... TArgs> + template <typename THandler, typename... TArgs> void set(TArgs&&... args) { m_impl = impl_ptr(new osmium::handler::detail::HandlerWrapper<THandler>(std::forward<TArgs>(args)...)); } diff --git a/include/osmium/experimental/flex_reader.hpp b/include/osmium/experimental/flex_reader.hpp index e99811e..c1d2357 100644 --- a/include/osmium/experimental/flex_reader.hpp +++ b/include/osmium/experimental/flex_reader.hpp @@ -53,7 +53,7 @@ namespace osmium { */ namespace experimental { - template <class TLocationHandler> + template <typename TLocationHandler> class FlexReader { bool m_with_areas; diff --git a/include/osmium/io/overwrite.hpp b/include/osmium/fwd.hpp similarity index 71% copy from include/osmium/io/overwrite.hpp copy to include/osmium/fwd.hpp index 0311aed..bfcb5f5 100644 --- a/include/osmium/io/overwrite.hpp +++ b/include/osmium/fwd.hpp @@ -1,5 +1,5 @@ -#ifndef OSMIUM_IO_OVERWRITE_HPP -#define OSMIUM_IO_OVERWRITE_HPP +#ifndef OSMIUM_FWD_HPP +#define OSMIUM_FWD_HPP /* @@ -33,28 +33,38 @@ DEALINGS IN THE SOFTWARE. */ -namespace osmium { - - namespace io { +/** + * + * @file + * + * This file contains forward declarations for commonly used Osmium classes. + * + */ - /** - * Allow overwriting of existing file? - */ - enum class overwrite : bool { - no = false, - allow = true - }; - - /** - * Should writer do an fsync before closing the file? - */ - enum class fsync : bool { - no = false, - yes = true - }; +namespace osmium { - } // namespace io + class Area; + class Box; + class Changeset; + class ChangesetComment; + class ChangesetDiscussion; + class InnerRing; + class Location; + class Node; + class NodeRef; + class NodeRefList; + class OSMEntity; + class OSMObject; + class OuterRing; + class Relation; + class RelationMemberList; + class Segment; + class Tag; + class TagList; + class Timestamp; + class Way; + class WayNodeList; } // namespace osmium -#endif // OSMIUM_IO_OVERWRITE_HPP +#endif // OSMIUM_FWD_HPP diff --git a/include/osmium/geom/factory.hpp b/include/osmium/geom/factory.hpp index ef75704..49dc78c 100644 --- a/include/osmium/geom/factory.hpp +++ b/include/osmium/geom/factory.hpp @@ -142,7 +142,7 @@ namespace osmium { /** * Geometry factory. */ - template <class TGeomImpl, class TProjection = IdentityProjection> + template <typename TGeomImpl, typename TProjection = IdentityProjection> class GeometryFactory { /** @@ -166,7 +166,7 @@ namespace osmium { /** * Constructor for default initialized projection. */ - template <class... TArgs> + template <typename... TArgs> GeometryFactory<TGeomImpl, TProjection>(TArgs&&... args) : m_projection(), m_impl(std::forward<TArgs>(args)...) { @@ -176,7 +176,7 @@ namespace osmium { * Constructor for explicitly initialized projection. Note that the * projection is moved into the GeometryFactory. */ - template <class... TArgs> + template <typename... TArgs> GeometryFactory<TGeomImpl, TProjection>(TProjection&& projection, TArgs&&... args) : m_projection(std::move(projection)), m_impl(std::forward<TArgs>(args)...) { @@ -227,7 +227,7 @@ namespace osmium { m_impl.linestring_start(); } - template <class TIter> + template <typename TIter> size_t fill_linestring(TIter it, TIter end) { size_t num_points = 0; for (; it != end; ++it, ++num_points) { @@ -236,7 +236,7 @@ namespace osmium { return num_points; } - template <class TIter> + template <typename TIter> size_t fill_linestring_unique(TIter it, TIter end) { size_t num_points = 0; osmium::Location last_location; @@ -301,7 +301,7 @@ namespace osmium { m_impl.polygon_start(); } - template <class TIter> + template <typename TIter> size_t fill_polygon(TIter it, TIter end) { size_t num_points = 0; for (; it != end; ++it, ++num_points) { @@ -310,7 +310,7 @@ namespace osmium { return num_points; } - template <class TIter> + template <typename TIter> size_t fill_polygon_unique(TIter it, TIter end) { size_t num_points = 0; osmium::Location last_location; diff --git a/include/osmium/geom/geojson.hpp b/include/osmium/geom/geojson.hpp index 96ddcd9..e5b5a9c 100644 --- a/include/osmium/geom/geojson.hpp +++ b/include/osmium/geom/geojson.hpp @@ -150,7 +150,7 @@ namespace osmium { } // namespace detail - template <class TProjection = IdentityProjection> + template <typename TProjection = IdentityProjection> using GeoJSONFactory = GeometryFactory<osmium::geom::detail::GeoJSONFactoryImpl, TProjection>; } // namespace geom diff --git a/include/osmium/geom/geos.hpp b/include/osmium/geom/geos.hpp index 771b087..49b1fd7 100644 --- a/include/osmium/geom/geos.hpp +++ b/include/osmium/geom/geos.hpp @@ -228,7 +228,7 @@ namespace osmium { } // namespace detail - template <class TProjection = IdentityProjection> + template <typename TProjection = IdentityProjection> using GEOSFactory = GeometryFactory<osmium::geom::detail::GEOSFactoryImpl, TProjection>; } // namespace geom diff --git a/include/osmium/geom/ogr.hpp b/include/osmium/geom/ogr.hpp index 7f726ed..4d5995c 100644 --- a/include/osmium/geom/ogr.hpp +++ b/include/osmium/geom/ogr.hpp @@ -168,7 +168,7 @@ namespace osmium { } // namespace detail - template <class TProjection = IdentityProjection> + template <typename TProjection = IdentityProjection> using OGRFactory = GeometryFactory<osmium::geom::detail::OGRFactoryImpl, TProjection>; } // namespace geom diff --git a/include/osmium/geom/rapid_geojson.hpp b/include/osmium/geom/rapid_geojson.hpp index a3d4687..87e479b 100644 --- a/include/osmium/geom/rapid_geojson.hpp +++ b/include/osmium/geom/rapid_geojson.hpp @@ -46,7 +46,7 @@ namespace osmium { * A geometry factory implementation that can be used with the * RapidJSON (https://github.com/miloyip/rapidjson) JSON writer. */ - template <class TWriter> + template <typename TWriter> class RapidGeoJSONFactoryImpl { TWriter* m_writer; @@ -180,7 +180,7 @@ namespace osmium { } // namespace detail - template <class TWriter, class TProjection = IdentityProjection> + template <typename TWriter, typename TProjection = IdentityProjection> using RapidGeoJSONFactory = GeometryFactory<detail::RapidGeoJSONFactoryImpl<TWriter>, TProjection>; } // namespace geom diff --git a/include/osmium/geom/wkb.hpp b/include/osmium/geom/wkb.hpp index d2145b1..49833e6 100644 --- a/include/osmium/geom/wkb.hpp +++ b/include/osmium/geom/wkb.hpp @@ -263,7 +263,7 @@ namespace osmium { } // namespace detail - template <class TProjection = IdentityProjection> + template <typename TProjection = IdentityProjection> using WKBFactory = GeometryFactory<osmium::geom::detail::WKBFactoryImpl, TProjection>; } // namespace geom diff --git a/include/osmium/geom/wkt.hpp b/include/osmium/geom/wkt.hpp index 5e1e9a7..9cf5371 100644 --- a/include/osmium/geom/wkt.hpp +++ b/include/osmium/geom/wkt.hpp @@ -146,7 +146,7 @@ namespace osmium { } // namespace detail - template <class TProjection = IdentityProjection> + template <typename TProjection = IdentityProjection> using WKTFactory = GeometryFactory<osmium::geom::detail::WKTFactoryImpl, TProjection>; } // namespace geom diff --git a/include/osmium/handler.hpp b/include/osmium/handler.hpp index a90d779..f366197 100644 --- a/include/osmium/handler.hpp +++ b/include/osmium/handler.hpp @@ -33,20 +33,9 @@ DEALINGS IN THE SOFTWARE. */ -namespace osmium { +#include <osmium/fwd.hpp> - class OSMObject; - class Node; - class Way; - class Relation; - class Area; - class Changeset; - class ChangesetDiscussion; - class TagList; - class WayNodeList; - class RelationMemberList; - class OuterRing; - class InnerRing; +namespace osmium { /** * @brief Osmium handlers provide callbacks for OSM objects diff --git a/include/osmium/handler/chain.hpp b/include/osmium/handler/chain.hpp index 1af3962..4f3291c 100644 --- a/include/osmium/handler/chain.hpp +++ b/include/osmium/handler/chain.hpp @@ -38,14 +38,14 @@ DEALINGS IN THE SOFTWARE. #include <osmium/handler.hpp> #define OSMIUM_CHAIN_HANDLER_CALL(_func_, _type_) \ - template <int N, int SIZE, class THandlers> \ + template <int N, int SIZE, typename THandlers> \ struct call_ ## _func_ { \ void operator()(THandlers& handlers, osmium::_type_& object) { \ std::get<N>(handlers)._func_(object); \ call_ ## _func_<N+1, SIZE, THandlers>()(handlers, object); \ } \ }; \ - template <int SIZE, class THandlers> \ + template <int SIZE, typename THandlers> \ struct call_ ## _func_<SIZE, SIZE, THandlers> { \ void operator()(THandlers&, osmium::_type_&) {} \ }; @@ -64,13 +64,13 @@ namespace osmium { * This handler allows chaining of any number of handlers into a single * handler. */ - template <class ...THandler> + template <typename... THandler> class ChainHandler : public osmium::handler::Handler { typedef std::tuple<THandler&...> handlers_type; handlers_type m_handlers; - template <int N, int SIZE, class THandlers> + template <int N, int SIZE, typename THandlers> struct call_flush { void operator()(THandlers& handlers) { std::get<N>(handlers).flush(); @@ -78,7 +78,7 @@ namespace osmium { } }; // struct call_flush - template <int SIZE, class THandlers> + template <int SIZE, typename THandlers> struct call_flush<SIZE, SIZE, THandlers> { void operator()(THandlers&) {} }; // struct call_flush diff --git a/include/osmium/handler/node_locations_for_ways.hpp b/include/osmium/handler/node_locations_for_ways.hpp index 9b9fcbf..8d31310 100644 --- a/include/osmium/handler/node_locations_for_ways.hpp +++ b/include/osmium/handler/node_locations_for_ways.hpp @@ -60,7 +60,7 @@ namespace osmium { * get(id) methods. * @tparam TStorageNegIDs Same but for negative IDs. */ - template <class TStoragePosIDs, class TStorageNegIDs = dummy_type> + template <typename TStoragePosIDs, typename TStorageNegIDs = dummy_type> class NodeLocationsForWays : public osmium::handler::Handler { static_assert(std::is_base_of<osmium::index::map::Map<osmium::unsigned_object_id_type, osmium::Location>, TStoragePosIDs>::value, "Index class must be derived from osmium::index::map::Map<osmium::unsigned_object_id_type, osmium::Location>"); diff --git a/include/osmium/index/detail/create_map_with_fd.hpp b/include/osmium/index/detail/create_map_with_fd.hpp index 5ccbfc8..5eb6cd0 100644 --- a/include/osmium/index/detail/create_map_with_fd.hpp +++ b/include/osmium/index/detail/create_map_with_fd.hpp @@ -47,7 +47,7 @@ namespace osmium { namespace detail { - template <class T> + template <typename T> inline T* create_map_with_fd(const std::vector<std::string>& config) { if (config.size() == 1) { return new T(); diff --git a/include/osmium/index/detail/vector_map.hpp b/include/osmium/index/detail/vector_map.hpp index e4f64ac..48b0f62 100644 --- a/include/osmium/index/detail/vector_map.hpp +++ b/include/osmium/index/detail/vector_map.hpp @@ -48,7 +48,7 @@ namespace osmium { namespace map { - template <class TVector, typename TId, typename TValue> + template <typename TVector, typename TId, typename TValue> class VectorBasedDenseMap : public Map<TId, TValue> { TVector m_vector; diff --git a/include/osmium/io/bzip2_compression.hpp b/include/osmium/io/bzip2_compression.hpp index 058d993..ad4b877 100644 --- a/include/osmium/io/bzip2_compression.hpp +++ b/include/osmium/io/bzip2_compression.hpp @@ -57,7 +57,7 @@ DEALINGS IN THE SOFTWARE. #include <osmium/io/compression.hpp> #include <osmium/io/error.hpp> #include <osmium/io/file_compression.hpp> -#include <osmium/io/overwrite.hpp> +#include <osmium/io/writer_options.hpp> #include <osmium/util/cast.hpp> #include <osmium/util/compatibility.hpp> diff --git a/include/osmium/io/compression.hpp b/include/osmium/io/compression.hpp index 64e59cc..4a69be7 100644 --- a/include/osmium/io/compression.hpp +++ b/include/osmium/io/compression.hpp @@ -52,7 +52,7 @@ DEALINGS IN THE SOFTWARE. #include <osmium/io/detail/read_write.hpp> #include <osmium/io/error.hpp> #include <osmium/io/file_compression.hpp> -#include <osmium/io/overwrite.hpp> +#include <osmium/io/writer_options.hpp> #include <osmium/util/compatibility.hpp> namespace osmium { diff --git a/include/osmium/io/detail/queue_util.hpp b/include/osmium/io/detail/queue_util.hpp index 47f30da..d410df1 100644 --- a/include/osmium/io/detail/queue_util.hpp +++ b/include/osmium/io/detail/queue_util.hpp @@ -73,21 +73,21 @@ namespace osmium { */ using future_string_queue_type = osmium::thread::Queue<std::future<std::string>>; - template <class T> + template <typename T> inline void add_to_queue(osmium::thread::Queue<std::future<T>>& queue, T&& data) { std::promise<T> promise; queue.push(promise.get_future()); promise.set_value(std::forward<T>(data)); } - template <class T> + template <typename T> inline void add_to_queue(osmium::thread::Queue<std::future<T>>& queue, std::exception_ptr&& exception) { std::promise<T> promise; queue.push(promise.get_future()); promise.set_exception(std::move(exception)); } - template <class T> + template <typename T> inline void add_end_of_data_to_queue(osmium::thread::Queue<std::future<T>>& queue) { add_to_queue<T>(queue, T{}); } @@ -100,7 +100,7 @@ namespace osmium { return !buffer; } - template <class T> + template <typename T> class queue_wrapper { using queue_type = osmium::thread::Queue<std::future<T>>; diff --git a/include/osmium/io/detail/read_write.hpp b/include/osmium/io/detail/read_write.hpp index 815c6bb..5d1fa26 100644 --- a/include/osmium/io/detail/read_write.hpp +++ b/include/osmium/io/detail/read_write.hpp @@ -46,7 +46,7 @@ DEALINGS IN THE SOFTWARE. # include <io.h> #endif -#include <osmium/io/overwrite.hpp> +#include <osmium/io/writer_options.hpp> namespace osmium { diff --git a/include/osmium/io/detail/xml_input_format.hpp b/include/osmium/io/detail/xml_input_format.hpp index 23caa8f..45dbde0 100644 --- a/include/osmium/io/detail/xml_input_format.hpp +++ b/include/osmium/io/detail/xml_input_format.hpp @@ -175,7 +175,7 @@ namespace osmium { /** * A C++ wrapper for the Expat parser that makes sure no memory is leaked. */ - template <class T> + template <typename T> class ExpatXMLParser { XML_Parser m_parser; diff --git a/include/osmium/io/gzip_compression.hpp b/include/osmium/io/gzip_compression.hpp index c0fdd93..705f416 100644 --- a/include/osmium/io/gzip_compression.hpp +++ b/include/osmium/io/gzip_compression.hpp @@ -51,7 +51,7 @@ DEALINGS IN THE SOFTWARE. #include <osmium/io/compression.hpp> #include <osmium/io/error.hpp> #include <osmium/io/file_compression.hpp> -#include <osmium/io/overwrite.hpp> +#include <osmium/io/writer_options.hpp> #include <osmium/util/cast.hpp> #include <osmium/util/compatibility.hpp> diff --git a/include/osmium/io/input_iterator.hpp b/include/osmium/io/input_iterator.hpp index b0bf56c..8647763 100644 --- a/include/osmium/io/input_iterator.hpp +++ b/include/osmium/io/input_iterator.hpp @@ -52,7 +52,7 @@ namespace osmium { * source. It hides all the buffer handling and makes the contents of a * source accessible as a normal STL input iterator. */ - template <class TSource, class TItem = osmium::memory::Item> + template <typename TSource, typename TItem = osmium::memory::Item> class InputIterator { static_assert(std::is_base_of<osmium::memory::Item, TItem>::value, "TItem must derive from osmium::buffer::Item"); @@ -133,7 +133,7 @@ namespace osmium { }; // class InputIterator - template <class TSource, class TItem = osmium::memory::Item> + template <typename TSource, typename TItem = osmium::memory::Item> class InputIteratorRange { InputIterator<TSource, TItem> m_begin; @@ -165,7 +165,7 @@ namespace osmium { }; // class InputIteratorRange - template <class TItem, class TSource> + template <typename TItem, typename TSource> InputIteratorRange<TSource, TItem> make_input_iterator_range(TSource& source) { using it_type = InputIterator<TSource, TItem>; return InputIteratorRange<TSource, TItem>(it_type{source}, it_type{}); diff --git a/include/osmium/io/output_iterator.hpp b/include/osmium/io/output_iterator.hpp index 8f2203a..3d60fe6 100644 --- a/include/osmium/io/output_iterator.hpp +++ b/include/osmium/io/output_iterator.hpp @@ -40,14 +40,7 @@ DEALINGS IN THE SOFTWARE. #include <osmium/memory/buffer.hpp> #include <osmium/osm/diff_object.hpp> - -#ifdef __GNUC__ -# define DEPRECATED __attribute__((deprecated)) -#elif defined(_MSC_VER) -# define DEPRECATED __declspec(deprecated) -#else -# define DEPRECATED -#endif +#include <osmium/util/compatibility.hpp> namespace osmium { @@ -57,7 +50,7 @@ namespace osmium { namespace io { - template <class TDest> + template <typename TDest> class OutputIterator : public std::iterator<std::output_iterator_tag, osmium::memory::Item> { TDest* m_destination; @@ -73,7 +66,7 @@ namespace osmium { * constructor is deprecated. Call Writer::set_buffer_size() * instead if you want to change the default. */ - DEPRECATED OutputIterator(TDest& destination, const size_t buffer_size) : + OSMIUM_DEPRECATED OutputIterator(TDest& destination, const size_t buffer_size) : m_destination(&destination) { destination.set_buffer_size(buffer_size); } @@ -90,7 +83,7 @@ namespace osmium { * Warning! Calling OutputIterator<Writer>::flush() is usually not * needed any more. Call flush() on the Writer instead if needed. */ - DEPRECATED void flush() { + OSMIUM_DEPRECATED void flush() { m_destination->flush(); } @@ -117,7 +110,7 @@ namespace osmium { }; // class OutputIterator - template <class TDest> + template <typename TDest> OutputIterator<TDest> make_output_iterator(TDest& destination) { return OutputIterator<TDest>{destination}; } @@ -127,8 +120,8 @@ namespace osmium { * deprecated. Call Writer::set_buffer_size() instead if you want to * change the default. */ - template <class TDest> - DEPRECATED OutputIterator<TDest> make_output_iterator(TDest& destination, const size_t buffer_size) { + template <typename TDest> + OSMIUM_DEPRECATED OutputIterator<TDest> make_output_iterator(TDest& destination, const size_t buffer_size) { destination.set_buffer_size(buffer_size); return OutputIterator<TDest>{destination}; } @@ -137,6 +130,4 @@ namespace osmium { } // namespace osmium -#undef DEPRECATED - #endif // OSMIUM_IO_OUTPUT_ITERATOR_HPP diff --git a/include/osmium/io/overwrite.hpp b/include/osmium/io/overwrite.hpp index 0311aed..f9fbc71 100644 --- a/include/osmium/io/overwrite.hpp +++ b/include/osmium/io/overwrite.hpp @@ -33,28 +33,7 @@ DEALINGS IN THE SOFTWARE. */ -namespace osmium { - - namespace io { - - /** - * Allow overwriting of existing file? - */ - enum class overwrite : bool { - no = false, - allow = true - }; - - /** - * Should writer do an fsync before closing the file? - */ - enum class fsync : bool { - no = false, - yes = true - }; - - } // namespace io - -} // namespace osmium +#pragma message("Including overwrite.hpp is deprecated, #include <osmium/io/writer_options.hpp> instead.") +#include <osmium/io/writer_options.hpp> #endif // OSMIUM_IO_OVERWRITE_HPP diff --git a/include/osmium/io/writer.hpp b/include/osmium/io/writer.hpp index 4b8823e..09c605c 100644 --- a/include/osmium/io/writer.hpp +++ b/include/osmium/io/writer.hpp @@ -49,7 +49,7 @@ DEALINGS IN THE SOFTWARE. #include <osmium/io/error.hpp> #include <osmium/io/file.hpp> #include <osmium/io/header.hpp> -#include <osmium/io/overwrite.hpp> +#include <osmium/io/writer_options.hpp> #include <osmium/memory/buffer.hpp> #include <osmium/thread/util.hpp> @@ -131,7 +131,7 @@ namespace osmium { } } - template <typename TFunction, typename ...TArgs> + template <typename TFunction, typename... TArgs> void ensure_cleanup(TFunction func, TArgs&&... args) { if (m_status != status::okay) { throw io_error("Can not write to writer when in status 'closed' or 'error'"); @@ -172,18 +172,21 @@ namespace osmium { * The constructor of the Writer object opens a file and writes the * header to it. * - * All parameters except the first one can be in any order. - * * @param file File (contains name and format info) to open. - * @param header Optional header data. If this is not given sensible - * defaults will be used. See the default constructor - * of osmium::io::Header for details. - * @param allow_overwrite Allow overwriting of existing file? Can be - * osmium::io::overwrite::allow or osmium::io::overwrite::no - * (default). - * @param fsync Should fsync be called on the file before closing it? - * Can be osmium::io::fsync::yes or - * osmium::io::fsync::no (default). + * @param args All further arguments are optional and can appear + * in any order: + * + * * osmium::io::Header: Optional header data. If this is + * not given, a default constructed osmium::io::Header + * object will be used. + * + * * osmium::io::overwrite: Allow overwriting of existing file? + * Can be osmium::io::overwrite::allow or + * osmium::io::overwrite::no (default). + * + * * osmium::io::fsync: Should fsync be called on the file + * before closing it? Can be osmium::io::fsync::yes or + * osmium::io::fsync::no (default). * * @throws osmium::io_error If there was an error. * @throws std::system_error If the file could not be opened. diff --git a/include/osmium/io/overwrite.hpp b/include/osmium/io/writer_options.hpp similarity index 94% copy from include/osmium/io/overwrite.hpp copy to include/osmium/io/writer_options.hpp index 0311aed..ef19553 100644 --- a/include/osmium/io/overwrite.hpp +++ b/include/osmium/io/writer_options.hpp @@ -1,5 +1,5 @@ -#ifndef OSMIUM_IO_OVERWRITE_HPP -#define OSMIUM_IO_OVERWRITE_HPP +#ifndef OSMIUM_IO_WRITER_OPTIONS_HPP +#define OSMIUM_IO_WRITER_OPTIONS_HPP /* @@ -57,4 +57,4 @@ namespace osmium { } // namespace osmium -#endif // OSMIUM_IO_OVERWRITE_HPP +#endif // OSMIUM_IO_WRITER_OPTIONS_HPP diff --git a/include/osmium/memory/buffer.hpp b/include/osmium/memory/buffer.hpp index 949f005..11a4c97 100644 --- a/include/osmium/memory/buffer.hpp +++ b/include/osmium/memory/buffer.hpp @@ -331,7 +331,7 @@ namespace osmium { * @tparam T Type we want to the data to be interpreted as. * @returns Reference of given type pointing to the data in the buffer. */ - template <class T> + template <typename T> T& get(const size_t offset) const { assert(m_data); return *reinterpret_cast<T*>(&m_data[offset]); @@ -400,7 +400,7 @@ namespace osmium { * @param item Reference to the item to be copied. * @returns Reference to newly copied data in the buffer. */ - template <class T> + template <typename T> T& add_item(const T& item) { assert(m_data); unsigned char* target = reserve_space(item.padded_size()); @@ -440,16 +440,16 @@ namespace osmium { * These iterators can be used to iterate over all items in * a buffer. */ - template <class T> + template <typename T> using t_iterator = osmium::memory::ItemIterator<T>; - template <class T> + template <typename T> using t_const_iterator = osmium::memory::ItemIterator<const T>; typedef t_iterator<osmium::OSMEntity> iterator; typedef t_const_iterator<osmium::OSMEntity> const_iterator; - template <class T> + template <typename T> t_iterator<T> begin() { assert(m_data); return t_iterator<T>(m_data, m_data + m_committed); @@ -460,7 +460,7 @@ namespace osmium { return iterator(m_data, m_data + m_committed); } - template <class T> + template <typename T> t_iterator<T> get_iterator(size_t offset) { assert(m_data); return t_iterator<T>(m_data + offset, m_data + m_committed); @@ -471,7 +471,7 @@ namespace osmium { return iterator(m_data + offset, m_data + m_committed); } - template <class T> + template <typename T> t_iterator<T> end() { assert(m_data); return t_iterator<T>(m_data + m_committed, m_data + m_committed); @@ -482,7 +482,7 @@ namespace osmium { return iterator(m_data + m_committed, m_data + m_committed); } - template <class T> + template <typename T> t_const_iterator<T> cbegin() const { assert(m_data); return t_const_iterator<T>(m_data, m_data + m_committed); @@ -493,7 +493,7 @@ namespace osmium { return const_iterator(m_data, m_data + m_committed); } - template <class T> + template <typename T> t_const_iterator<T> get_iterator(size_t offset) const { assert(m_data); return t_const_iterator<T>(m_data + offset, m_data + m_committed); @@ -504,7 +504,7 @@ namespace osmium { return const_iterator(m_data + offset, m_data + m_committed); } - template <class T> + template <typename T> t_const_iterator<T> cend() const { assert(m_data); return t_const_iterator<T>(m_data + m_committed, m_data + m_committed); @@ -515,7 +515,7 @@ namespace osmium { return const_iterator(m_data + m_committed, m_data + m_committed); } - template <class T> + template <typename T> t_const_iterator<T> begin() const { return cbegin<T>(); } @@ -524,7 +524,7 @@ namespace osmium { return cbegin(); } - template <class T> + template <typename T> t_const_iterator<T> end() const { return cend<T>(); } @@ -567,7 +567,7 @@ namespace osmium { * The behaviour is undefined if you call this on an invalid * buffer. */ - template <class TCallbackClass> + template <typename TCallbackClass> void purge_removed(TCallbackClass* callback) { assert(m_data); if (begin() == end()) { diff --git a/include/osmium/memory/collection.hpp b/include/osmium/memory/collection.hpp index 5cf3cc6..54a97f5 100644 --- a/include/osmium/memory/collection.hpp +++ b/include/osmium/memory/collection.hpp @@ -43,7 +43,7 @@ namespace osmium { namespace memory { - template <class TMember> + template <typename TMember> class CollectionIterator : public std::iterator<std::forward_iterator_tag, TMember> { // This data_type is either 'unsigned char*' or 'const unsigned char*' depending @@ -101,7 +101,7 @@ namespace osmium { }; // class CollectionIterator - template <class TMember, osmium::item_type TCollectionItemType> + template <typename TMember, osmium::item_type TCollectionItemType> class Collection : public Item { public: diff --git a/include/osmium/memory/item.hpp b/include/osmium/memory/item.hpp index dc54404..30c5377 100644 --- a/include/osmium/memory/item.hpp +++ b/include/osmium/memory/item.hpp @@ -102,10 +102,10 @@ namespace osmium { uint16_t m_removed : 1; uint16_t m_padding : 15; - template <class TMember> + template <typename TMember> friend class CollectionIterator; - template <class TMember> + template <typename TMember> friend class ItemIterator; friend class osmium::builder::Builder; diff --git a/include/osmium/memory/item_iterator.hpp b/include/osmium/memory/item_iterator.hpp index 3e5b5fa..c6b4205 100644 --- a/include/osmium/memory/item_iterator.hpp +++ b/include/osmium/memory/item_iterator.hpp @@ -60,7 +60,7 @@ namespace osmium { namespace detail { - template <class T> + template <typename T> inline bool type_is_compatible(osmium::item_type) noexcept { return true; } @@ -127,7 +127,7 @@ namespace osmium { } // namespace detail - template <class TMember> + template <typename TMember> class ItemIterator : public std::iterator<std::forward_iterator_tag, TMember> { static_assert(std::is_base_of<osmium::memory::Item, TMember>::value, "TMember must derive from osmium::memory::Item"); @@ -160,7 +160,7 @@ namespace osmium { advance_to_next_item_of_right_type(); } - template <class T> + template <typename T> ItemIterator<T> cast() const { return ItemIterator<T>(m_data, m_end); } diff --git a/include/osmium/object_pointer_collection.hpp b/include/osmium/object_pointer_collection.hpp index 7524703..85566b6 100644 --- a/include/osmium/object_pointer_collection.hpp +++ b/include/osmium/object_pointer_collection.hpp @@ -84,7 +84,7 @@ namespace osmium { /** * Sort objects according to the given order functor. */ - template <class TCompare> + template <typename TCompare> void sort(TCompare&& compare) { std::sort(m_objects.begin(), m_objects.end(), std::forward<TCompare>(compare)); } diff --git a/include/osmium/osm/changeset.hpp b/include/osmium/osm/changeset.hpp index c5e8358..051b525 100644 --- a/include/osmium/osm/changeset.hpp +++ b/include/osmium/osm/changeset.hpp @@ -49,7 +49,7 @@ namespace osmium { namespace builder { class ChangesetDiscussionBuilder; - template <class T> class ObjectBuilder; + template <typename T> class ObjectBuilder; } class Changeset; @@ -77,7 +77,7 @@ namespace osmium { return data() + osmium::memory::padded_length(sizeof(ChangesetComment) + m_user_size + m_text_size); } - template <class TMember> + template <typename TMember> friend class osmium::memory::CollectionIterator; unsigned char* next() { diff --git a/include/osmium/osm/crc.hpp b/include/osmium/osm/crc.hpp index cf81476..309f50a 100644 --- a/include/osmium/osm/crc.hpp +++ b/include/osmium/osm/crc.hpp @@ -79,7 +79,7 @@ namespace osmium { } - template <class TCRC> + template <typename TCRC> class CRC { TCRC m_crc; diff --git a/include/osmium/osm/diff_object.hpp b/include/osmium/osm/diff_object.hpp index 1e053fd..96e07bc 100644 --- a/include/osmium/osm/diff_object.hpp +++ b/include/osmium/osm/diff_object.hpp @@ -33,6 +33,7 @@ DEALINGS IN THE SOFTWARE. */ +#include <osmium/fwd.hpp> #include <osmium/osm/item_type.hpp> #include <osmium/osm/object.hpp> #include <osmium/osm/timestamp.hpp> @@ -40,10 +41,6 @@ DEALINGS IN THE SOFTWARE. namespace osmium { - class Node; - class Way; - class Relation; - class DiffObject { protected: @@ -145,7 +142,7 @@ namespace osmium { }; // class DiffObject - template <class T> + template <typename T> class DiffObjectDerived : public DiffObject { public: diff --git a/include/osmium/osm/entity.hpp b/include/osmium/osm/entity.hpp index ce292c8..c7f7055 100644 --- a/include/osmium/osm/entity.hpp +++ b/include/osmium/osm/entity.hpp @@ -41,7 +41,7 @@ namespace osmium { namespace detail { - template <class TSubitem, class TIter> + template <typename TSubitem, typename TIter> inline TSubitem& subitem_of_type(TIter it, TIter end) { for (; it != end; ++it) { if (it->type() == TSubitem::itemtype) { diff --git a/include/osmium/osm/node.hpp b/include/osmium/osm/node.hpp index 123bfc4..e9facef 100644 --- a/include/osmium/osm/node.hpp +++ b/include/osmium/osm/node.hpp @@ -41,7 +41,7 @@ DEALINGS IN THE SOFTWARE. namespace osmium { namespace builder { - template <class T> class ObjectBuilder; + template <typename T> class ObjectBuilder; } class Node : public OSMObject { diff --git a/include/osmium/osm/object.hpp b/include/osmium/osm/object.hpp index 039e741..c0f46ad 100644 --- a/include/osmium/osm/object.hpp +++ b/include/osmium/osm/object.hpp @@ -355,38 +355,38 @@ namespace osmium { return cend(); } - template <class T> + template <typename T> using t_iterator = osmium::memory::ItemIterator<T>; - template <class T> + template <typename T> using t_const_iterator = osmium::memory::ItemIterator<const T>; - template <class T> + template <typename T> t_iterator<T> begin() { return t_iterator<T>(subitems_position(), next()); } - template <class T> + template <typename T> t_iterator<T> end() { return t_iterator<T>(next(), next()); } - template <class T> + template <typename T> t_const_iterator<T> cbegin() const { return t_const_iterator<T>(subitems_position(), next()); } - template <class T> + template <typename T> t_const_iterator<T> cend() const { return t_const_iterator<T>(next(), next()); } - template <class T> + template <typename T> t_const_iterator<T> begin() const { return cbegin<T>(); } - template <class T> + template <typename T> t_const_iterator<T> end() const { return cend<T>(); } diff --git a/include/osmium/osm/relation.hpp b/include/osmium/osm/relation.hpp index 99a4f4c..1a8b686 100644 --- a/include/osmium/osm/relation.hpp +++ b/include/osmium/osm/relation.hpp @@ -47,7 +47,7 @@ DEALINGS IN THE SOFTWARE. namespace osmium { namespace builder { - template <class> class ObjectBuilder; + template <typename> class ObjectBuilder; class RelationMemberListBuilder; } @@ -74,7 +74,7 @@ namespace osmium { return data() + osmium::memory::padded_length(sizeof(RelationMember) + m_role_size); } - template <class TMember> + template <typename TMember> friend class osmium::memory::CollectionIterator; unsigned char* next() { diff --git a/include/osmium/osm/tag.hpp b/include/osmium/osm/tag.hpp index 2e93ede..30e670d 100644 --- a/include/osmium/osm/tag.hpp +++ b/include/osmium/osm/tag.hpp @@ -53,7 +53,7 @@ namespace osmium { Tag& operator=(const Tag&) = delete; Tag& operator=(Tag&&) = delete; - template <class TMember> + template <typename TMember> friend class osmium::memory::CollectionIterator; static unsigned char* after_null(unsigned char* ptr) { diff --git a/include/osmium/osm/way.hpp b/include/osmium/osm/way.hpp index 3c5f1f6..89380e4 100644 --- a/include/osmium/osm/way.hpp +++ b/include/osmium/osm/way.hpp @@ -43,7 +43,7 @@ DEALINGS IN THE SOFTWARE. namespace osmium { namespace builder { - template <class T> class ObjectBuilder; + template <typename T> class ObjectBuilder; } /** diff --git a/include/osmium/relations/collector.hpp b/include/osmium/relations/collector.hpp index 040e392..e7f76a2 100644 --- a/include/osmium/relations/collector.hpp +++ b/include/osmium/relations/collector.hpp @@ -42,6 +42,7 @@ DEALINGS IN THE SOFTWARE. //#include <iostream> #include <vector> +#include <osmium/fwd.hpp> #include <osmium/osm/item_type.hpp> #include <osmium/osm/object.hpp> #include <osmium/osm/relation.hpp> // IWYU pragma: keep @@ -55,9 +56,6 @@ DEALINGS IN THE SOFTWARE. namespace osmium { - class Node; - class Way; - /** * @brief Code related to the assembly of OSM relations */ @@ -91,7 +89,7 @@ namespace osmium { * * @tparam TRelations Are we interested in member relations? */ - template <class TCollector, bool TNodes, bool TWays, bool TRelations> + template <typename TCollector, bool TNodes, bool TWays, bool TRelations> class Collector { /** @@ -474,14 +472,14 @@ namespace osmium { return range.first->buffer_offset(); } - template <class TIter> + template <typename TIter> void read_relations(TIter begin, TIter end) { HandlerPass1 handler(*static_cast<TCollector*>(this)); osmium::apply(begin, end, handler); sort_member_meta(); } - template <class TSource> + template <typename TSource> void read_relations(TSource& source) { read_relations(std::begin(source), std::end(source)); source.close(); diff --git a/include/osmium/relations/detail/member_meta.hpp b/include/osmium/relations/detail/member_meta.hpp index a45088e..ea86734 100644 --- a/include/osmium/relations/detail/member_meta.hpp +++ b/include/osmium/relations/detail/member_meta.hpp @@ -144,7 +144,7 @@ namespace osmium { * @param begin Begin of iterator range * @param end End of iterator range */ - template <class TIter> + template <typename TIter> inline typename std::iterator_traits<TIter>::difference_type count_not_removed(TIter begin, TIter end) { return std::count_if(begin, end, [](MemberMeta& mm) { return !mm.removed(); diff --git a/include/osmium/tags/filter.hpp b/include/osmium/tags/filter.hpp index 3c1946c..0d3fc4e 100644 --- a/include/osmium/tags/filter.hpp +++ b/include/osmium/tags/filter.hpp @@ -46,7 +46,7 @@ namespace osmium { namespace tags { - template <class TKey> + template <typename TKey> struct match_key { bool operator()(const TKey& rule_key, const char* tag_key) { return rule_key == tag_key; @@ -59,7 +59,7 @@ namespace osmium { } }; // struct match_key_prefix - template <class TValue> + template <typename TValue> struct match_value { bool operator()(const TValue& rule_value, const char* tag_value) { return rule_value == tag_value; @@ -73,7 +73,7 @@ namespace osmium { } }; // struct match_value<void> - template <class TKey, class TValue=void, class TKeyComp=match_key<TKey>, class TValueComp=match_value<TValue>> + template <typename TKey, typename TValue=void, typename TKeyComp=match_key<TKey>, typename TValueComp=match_value<TValue>> class Filter { typedef TKey key_type; @@ -115,7 +115,7 @@ namespace osmium { m_default_result(default_result) { } - template <class V=TValue, typename std::enable_if<!std::is_void<V>::value, int>::type = 0> + template <typename V=TValue, typename std::enable_if<!std::is_void<V>::value, int>::type = 0> Filter& add(bool result, const key_type& key, const value_type& value) { m_rules.emplace_back(result, false, key, value); return *this; diff --git a/include/osmium/tags/taglist.hpp b/include/osmium/tags/taglist.hpp index d7c78dc..8fc9c68 100644 --- a/include/osmium/tags/taglist.hpp +++ b/include/osmium/tags/taglist.hpp @@ -45,17 +45,17 @@ namespace osmium { */ namespace tags { - template <class TFilter> + template <typename TFilter> inline bool match_any_of(const osmium::TagList& tag_list, TFilter&& filter) { return std::any_of(tag_list.cbegin(), tag_list.cend(), std::forward<TFilter>(filter)); } - template <class TFilter> + template <typename TFilter> inline bool match_all_of(const osmium::TagList& tag_list, TFilter&& filter) { return std::all_of(tag_list.cbegin(), tag_list.cend(), std::forward<TFilter>(filter)); } - template <class TFilter> + template <typename TFilter> inline bool match_none_of(const osmium::TagList& tag_list, TFilter&& filter) { return std::none_of(tag_list.cbegin(), tag_list.cend(), std::forward<TFilter>(filter)); } diff --git a/include/osmium/thread/util.hpp b/include/osmium/thread/util.hpp index 5a1ab16..00de0d8 100644 --- a/include/osmium/thread/util.hpp +++ b/include/osmium/thread/util.hpp @@ -49,7 +49,7 @@ namespace osmium { * the exception stored in the future if there was one. Otherwise it * will just return. */ - template <class T> + template <typename T> inline void check_for_exception(std::future<T>& future) { if (future.valid() && future.wait_for(std::chrono::seconds(0)) == std::future_status::ready) { future.get(); @@ -60,7 +60,7 @@ namespace osmium { * Wait until the given future becomes ready. Will block if the future * is not ready. Can be called more than once unlike future.get(). */ - template <class T> + template <typename T> inline void wait_until_done(std::future<T>& future) { if (future.valid()) { future.get(); diff --git a/include/osmium/util/compatibility.hpp b/include/osmium/util/compatibility.hpp index 90d85c5..23753ce 100644 --- a/include/osmium/util/compatibility.hpp +++ b/include/osmium/util/compatibility.hpp @@ -44,4 +44,13 @@ DEALINGS IN THE SOFTWARE. # define OSMIUM_NORETURN [[noreturn]] #endif +// [[deprecated]] is only available in C++14, use this for the time being +#ifdef __GNUC__ +# define OSMIUM_DEPRECATED __attribute__((deprecated)) +#elif defined(_MSC_VER) +# define OSMIUM_DEPRECATED __declspec(deprecated) +#else +# define OSMIUM_DEPRECATED +#endif + #endif // OSMIUM_UTIL_COMPATIBILITY_HPP diff --git a/include/osmium/visitor.hpp b/include/osmium/visitor.hpp index a52e8c3..35fcb4e 100644 --- a/include/osmium/visitor.hpp +++ b/include/osmium/visitor.hpp @@ -58,7 +58,7 @@ namespace osmium { template <typename T, typename U> using ConstIfConst = typename std::conditional<std::is_const<T>::value, typename std::add_const<U>::type, U>::type; - template <class THandler, class TItem> + template <typename THandler, typename TItem> inline void apply_item_recurse(TItem& item, THandler& handler) { switch (item.type()) { case osmium::item_type::undefined: @@ -104,7 +104,7 @@ namespace osmium { } } - template <class THandler> + template <typename THandler> inline void apply_item_recurse(const osmium::OSMEntity& item, THandler& handler) { switch (item.type()) { case osmium::item_type::node: @@ -131,7 +131,7 @@ namespace osmium { } } - template <class THandler> + template <typename THandler> inline void apply_item_recurse(osmium::OSMEntity& item, THandler& handler) { switch (item.type()) { case osmium::item_type::node: @@ -158,7 +158,7 @@ namespace osmium { } } - template <class THandler> + template <typename THandler> inline void apply_item_recurse(const osmium::OSMObject& item, THandler& handler) { switch (item.type()) { case osmium::item_type::node: @@ -182,7 +182,7 @@ namespace osmium { } } - template <class THandler> + template <typename THandler> inline void apply_item_recurse(osmium::OSMObject& item, THandler& handler) { switch (item.type()) { case osmium::item_type::node: @@ -206,18 +206,18 @@ namespace osmium { } } - template <class THandler, class TItem, class ...TRest> + template <typename THandler, typename TItem, typename... TRest> inline void apply_item_recurse(TItem& item, THandler& handler, TRest&... more) { apply_item_recurse(item, handler); apply_item_recurse(item, more...); } - template <class THandler> + template <typename THandler> inline void flush_recurse(THandler& handler) { handler.flush(); } - template <class THandler, class ...TRest> + template <typename THandler, typename... TRest> inline void flush_recurse(THandler& handler, TRest&... more) { flush_recurse(handler); flush_recurse(more...); @@ -225,17 +225,17 @@ namespace osmium { } // namespace detail - template <class ...THandlers> + template <typename... THandlers> inline void apply_item(const osmium::memory::Item& item, THandlers&... handlers) { detail::apply_item_recurse(item, handlers...); } - template <class ...THandlers> + template <typename... THandlers> inline void apply_item(osmium::memory::Item& item, THandlers&... handlers) { detail::apply_item_recurse(item, handlers...); } - template <class TIterator, class ...THandlers> + template <typename TIterator, typename... THandlers> inline void apply(TIterator it, TIterator end, THandlers&... handlers) { for (; it != end; ++it) { detail::apply_item_recurse(*it, handlers...); @@ -243,12 +243,12 @@ namespace osmium { detail::flush_recurse(handlers...); } - template <class TContainer, class ...THandlers> + template <typename TContainer, typename... THandlers> inline void apply(TContainer& c, THandlers&... handlers) { apply(std::begin(c), std::end(c), handlers...); } - template <class ...THandlers> + template <typename... THandlers> inline void apply(const osmium::memory::Buffer& buffer, THandlers&... handlers) { apply(buffer.cbegin(), buffer.cend(), handlers...); } -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-grass/libosmium.git _______________________________________________ Pkg-grass-devel mailing list Pkg-grass-devel@lists.alioth.debian.org http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-grass-devel