当前位置: 首页>>代码示例>>C++>>正文


C++ memory::Buffer类代码示例

本文整理汇总了C++中osmium::memory::Buffer的典型用法代码示例。如果您正苦于以下问题:C++ Buffer类的具体用法?C++ Buffer怎么用?C++ Buffer使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。


在下文中一共展示了Buffer类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: opl_parse

 /**
  * Parses one line in OPL format. The line must not have a newline
  * character at the end. Buffer.commit() is called automatically if the
  * write succeeded.
  *
  * @param data Line must be in this zero-delimited string.
  * @param buffer Result will be written to this buffer.
  *
  * @returns true if an entity was parsed, false otherwise (for instance
  *          when the line is empty).
  * @throws osmium::opl_error If the parsing fails.
  */
 inline bool opl_parse(const char* data, osmium::memory::Buffer& buffer) {
     try {
         const bool wrote_something = osmium::io::detail::opl_parse_line(0, data, buffer);
         buffer.commit();
         return wrote_something;
     } catch (const osmium::opl_error&) {
         buffer.rollback();
         throw;
     }
 }
开发者ID:Project-OSRM,项目名称:osrm-backend,代码行数:22,代码来源:opl.hpp

示例2: Builder

 explicit Builder(osmium::memory::Buffer& buffer, Builder* parent, osmium::memory::item_size_type size) :
     m_buffer(buffer),
     m_parent(parent),
     m_item_offset(buffer.written()) {
     m_buffer.reserve_space(size);
     assert(buffer.is_aligned());
     if (m_parent) {
         m_parent->add_size(size);
     }
 }
开发者ID:c0nk,项目名称:osrm-backend,代码行数:10,代码来源:builder.hpp

示例3: operator

            /**
             * Assemble an area from the given way.
             * The resulting area is put into the out_buffer.
             *
             * @returns false if there was some kind of error building the
             *          area, true otherwise.
             */
            bool operator()(const osmium::Way& way, osmium::memory::Buffer& out_buffer) {
                if (!config().create_way_polygons) {
                    return true;
                }

                if (config().problem_reporter) {
                    config().problem_reporter->set_object(osmium::item_type::way, way.id());
                    config().problem_reporter->set_nodes(way.nodes().size());
                }

                // Ignore (but count) ways without segments.
                if (way.nodes().size() < 2) {
                    ++stats().short_ways;
                    return false;
                }

                if (!way.ends_have_same_id()) {
                    ++stats().duplicate_nodes;
                    if (config().problem_reporter) {
                        config().problem_reporter->report_duplicate_node(way.nodes().front().ref(), way.nodes().back().ref(), way.nodes().front().location());
                    }
                }

                ++stats().from_ways;
                stats().invalid_locations = segment_list().extract_segments_from_way(config().problem_reporter,
                                                                                     stats().duplicate_nodes,
                                                                                     way);
                if (!config().ignore_invalid_locations && stats().invalid_locations > 0) {
                    return false;
                }

                if (config().debug_level > 0) {
                    std::cerr << "\nAssembling way " << way.id() << " containing " << segment_list().size() << " nodes\n";
                }

                // Now create the Area object and add the attributes and tags
                // from the way.
                const bool okay = create_area(out_buffer, way);
                if (okay) {
                    out_buffer.commit();
                } else {
                    out_buffer.rollback();
                }

                if (debug()) {
                    std::cerr << "Done: " << stats() << "\n";
                }

                return okay;
            }
开发者ID:Project-OSRM,项目名称:osrm-backend,代码行数:57,代码来源:assembler.hpp

示例4: parse_polygon_array

std::size_t parse_polygon_array(const rapidjson::Value& value, osmium::memory::Buffer& buffer) {
    {
        osmium::builder::AreaBuilder builder{buffer};
        parse_rings(value, builder);
    }

    return buffer.commit();
}
开发者ID:tomhughes,项目名称:osmium-tool,代码行数:8,代码来源:geojson_file_parser.cpp

示例5: maybe_flush

                void maybe_flush() {
                    if (m_buffer.committed() > 800*1024) {
                        osmium::memory::Buffer buffer{1024*1024};
                        using std::swap;
                        swap(m_buffer, buffer);
                        send_to_output_queue(std::move(buffer));

                    }
                }
开发者ID:KnockSoftware,项目名称:osrm-backend,代码行数:9,代码来源:opl_input_format.hpp

示例6: operator

            /**
             * Assemble an area from the given way.
             *
             * The resulting area is put into the out_buffer.
             *
             * @returns false if there was some kind of error building the
             *          area, true otherwise.
             */
            bool operator()(const osmium::Way& way, osmium::memory::Buffer& out_buffer) {
                segment_list().extract_segments_from_way(config().problem_reporter, stats().duplicate_nodes, way);

                if (!create_rings()) {
                    return false;
                }

                {
                    osmium::builder::AreaBuilder builder{out_buffer};
                    builder.initialize_from_object(way);
                    add_rings_to_area(builder);
                }
                out_buffer.commit();

                return true;
            }
开发者ID:KnockSoftware,项目名称:osrm-backend,代码行数:24,代码来源:geom_assembler.hpp

示例7: parse_multipolygon_array

std::size_t parse_multipolygon_array(const rapidjson::Value& value, osmium::memory::Buffer& buffer) {
    assert(value.IsArray());
    const auto array = value.GetArray();
    if (array.Empty()) {
        throw config_error{"Multipolygon must contain at least one polygon array."};
    }

    {
        osmium::builder::AreaBuilder builder{buffer};
        for (const auto& polygon : array) {
            if (!polygon.IsArray()) {
                throw config_error{"Polygon must be an array."};
            }
            parse_rings(polygon, builder);
        }
    }

    return buffer.commit();
}
开发者ID:tomhughes,项目名称:osmium-tool,代码行数:19,代码来源:geojson_file_parser.cpp

示例8: operator

 osmium::item_type operator()(const osmium::memory::Buffer& buffer) {
     return operator()(buffer.cbegin(), buffer.cend());
 }
开发者ID:jokoala,项目名称:libosmium,代码行数:3,代码来源:handler.hpp

示例9: operator

            // XXX
            void operator()(const osmium::memory::Buffer& buffer) {
                osmium::io::detail::reliable_write(m_data_fd, buffer.data(), buffer.committed());

                osmium::apply(buffer.begin(), buffer.end(), *this);
            }
开发者ID:Gozhack,项目名称:osrm-backend,代码行数:6,代码来源:disk_store.hpp

示例10: TEST_CASE

#include "catch.hpp"

#include <osmium/memory/buffer.hpp>

#include <array>
#include <stdexcept>

TEST_CASE("Buffer basics") {
    osmium::memory::Buffer invalid_buffer1;
    osmium::memory::Buffer invalid_buffer2;
    osmium::memory::Buffer empty_buffer1{1024};
    osmium::memory::Buffer empty_buffer2{2048};

    REQUIRE_FALSE(invalid_buffer1);
    REQUIRE_FALSE(invalid_buffer2);
    REQUIRE(empty_buffer1);
    REQUIRE(empty_buffer2);

    REQUIRE(invalid_buffer1 == invalid_buffer2);
    REQUIRE(invalid_buffer1 != empty_buffer1);
    REQUIRE(empty_buffer1   != empty_buffer2);

    REQUIRE(invalid_buffer1.capacity()  == 0);
    REQUIRE(invalid_buffer1.written()   == 0);
    REQUIRE(invalid_buffer1.committed() == 0);
    REQUIRE(invalid_buffer1.clear() == 0);

    REQUIRE(empty_buffer1.capacity()  == 1024);
    REQUIRE(empty_buffer1.written()   ==    0);
    REQUIRE(empty_buffer1.committed() ==    0);
    REQUIRE(empty_buffer1.is_aligned());
开发者ID:osmcode,项目名称:libosmium,代码行数:31,代码来源:test_buffer_basics.cpp

示例11: TEST_CASE

#include <osmium/io/any_compression.hpp>
#include <osmium/io/xml_input.hpp>

TEST_CASE("Single relation") {
  SECTION("Should extract the relation because it uses a node in the bounding box") {
    using id_set = std_id_set;

    osmium::io::File file(test_data_file("test_single_relation.osm"));
    osmium::Box box(osmium::Location(double(-1), double(-1)),
                    osmium::Location(double( 1), double( 1)));

    hsplitter::HistoryExtractReader<id_set> reader =
      hsplitter::read_extract<id_set>(file, box);

    REQUIRE(!reader.eof());
    osmium::memory::Buffer buffer = reader.read();
    REQUIRE(std::distance(buffer.begin(), buffer.end()) == 2);
    osmium::memory::Buffer::iterator itr = buffer.begin();
    {
      REQUIRE(itr->type() == osmium::item_type::node);
      auto &node = static_cast<const osmium::Node &>(*itr++);
      REQUIRE(node.id() == 1);
    }
    {
      REQUIRE(itr->type() == osmium::item_type::relation);
      auto &rel = static_cast<const osmium::Relation &>(*itr++);
      REQUIRE(rel.id() == 1);
    }
  }

  SECTION("Should extract the relation because it uses a way which uses a node in the bbox") {
开发者ID:zerebubuth,项目名称:osmium-history-splitter,代码行数:31,代码来源:test_single_relation.cpp

示例12: apply_diff

 inline void apply_diff(const osmium::memory::Buffer& buffer, THandlers&... handlers) {
     apply_diff(buffer.cbegin(), buffer.cend(), handlers...);
 }
开发者ID:dforsi,项目名称:libosmium,代码行数:3,代码来源:diff_visitor.hpp

示例13: TEST_CASE

TEST_CASE("Write with mock compressor") {

    std::string fail_in;

    osmium::io::CompressionFactory::instance().register_compression(osmium::io::file_compression::gzip,
        [&](int, osmium::io::fsync) { return new MockCompressor(fail_in); },
        [](int) { return nullptr; },
        [](const char*, size_t) { return nullptr; }
    );

    osmium::io::Header header;
    header.set("generator", "test_writer_with_mock_compression.cpp");

    osmium::io::Reader reader{with_data_dir("t/io/data.osm")};
    osmium::memory::Buffer buffer = reader.read();
    REQUIRE(buffer);
    REQUIRE(buffer.committed() > 0);
    REQUIRE(buffer.select<osmium::OSMObject>().size() > 0);

    SECTION("fail on construction") {

        fail_in = "constructor";

        REQUIRE_THROWS_AS([&](){
            osmium::io::Writer writer("test-writer-mock-fail-on-construction.osm.gz", header, osmium::io::overwrite::allow);
            writer(std::move(buffer));
            writer.close();
        }(), const std::logic_error&);

    }
开发者ID:KnockSoftware,项目名称:osrm-backend,代码行数:30,代码来源:test_writer_with_mock_compression.cpp

示例14: used_memory

            uint64_t used_memory() const {
                const uint64_t nmembers = m_member_meta[0].capacity() + m_member_meta[1].capacity() + m_member_meta[2].capacity();
                const uint64_t members = nmembers * sizeof(MemberMeta);
                const uint64_t relations = m_relations.capacity() * sizeof(RelationMeta);
                const uint64_t relations_buffer_capacity = m_relations_buffer.capacity();
                const uint64_t members_buffer_capacity = m_members_buffer.capacity();

                std::cout << "  nR  = m_relations.capacity() ........... = " << std::setw(12) << m_relations.capacity() << "\n";
                std::cout << "  nMN = m_member_meta[NODE].capacity() ... = " << std::setw(12) << m_member_meta[0].capacity() << "\n";
                std::cout << "  nMW = m_member_meta[WAY].capacity() .... = " << std::setw(12) << m_member_meta[1].capacity() << "\n";
                std::cout << "  nMR = m_member_meta[RELATION].capacity() = " << std::setw(12) << m_member_meta[2].capacity() << "\n";
                std::cout << "  nM  = m_member_meta[*].capacity() ...... = " << std::setw(12) << nmembers << "\n";

                std::cout << "  sRM = sizeof(RelationMeta) ............. = " << std::setw(12) << sizeof(RelationMeta) << "\n";
                std::cout << "  sMM = sizeof(MemberMeta) ............... = " << std::setw(12) << sizeof(MemberMeta) << "\n\n";

                std::cout << "  nR * sRM ............................... = " << std::setw(12) << relations << "\n";
                std::cout << "  nM * sMM ............................... = " << std::setw(12) << members << "\n";
                std::cout << "  relations_buffer_capacity .............. = " << std::setw(12) << relations_buffer_capacity << "\n";
                std::cout << "  members_buffer_capacity ................ = " << std::setw(12) << members_buffer_capacity << "\n";

                const uint64_t total = relations + members + relations_buffer_capacity + members_buffer_capacity;

                std::cout << "  total .................................. = " << std::setw(12) << total << "\n";
                std::cout << "  =======================================================\n";

                return relations_buffer_capacity + members_buffer_capacity + relations + members;
            }
开发者ID:AFDudley,项目名称:osm2pgsql,代码行数:28,代码来源:collector.hpp

示例15: add_relation

            /**
             * Tell the Collector that you are interested in this relation
             * and want it kept until all members have been assembled and
             * it is handed back to you.
             *
             * The relation is copied and stored in a buffer inside the
             * collector.
             */
            void add_relation(const osmium::Relation& relation) {
                const size_t offset = m_relations_buffer.committed();
                m_relations_buffer.add_item(relation);

                RelationMeta relation_meta(offset);

                int n = 0;
                for (auto& member : m_relations_buffer.get<osmium::Relation>(offset).members()) {
                    if (static_cast<TCollector*>(this)->keep_member(relation_meta, member)) {
                        member_meta(member.type()).emplace_back(member.ref(), m_relations.size(), n);
                        relation_meta.increment_need_members();
                    } else {
                        member.ref(0); // set member id to zero to indicate we are not interested
                    }
                    ++n;
                }

                assert(offset == m_relations_buffer.committed());
                if (relation_meta.has_all_members()) {
                    m_relations_buffer.rollback();
                } else {
                    m_relations_buffer.commit();
                    m_relations.push_back(std::move(relation_meta));
//                    std::cerr << "added relation id=" << relation.id() << "\n";
                }
            }
开发者ID:AFDudley,项目名称:osm2pgsql,代码行数:34,代码来源:collector.hpp


注:本文中的osmium::memory::Buffer类示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。