• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

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

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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



在下文中一共展示了Buffer类的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的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: TEST_CASE

TEST_CASE("Split relations") {
  SECTION("should account for nodes.") {
    using map_t = tileset;
    constexpr size_t buffer_size = 10000;
    unsigned char data[buffer_size];

    map_t node_tiles, way_tiles, extra_node_tiles;
    node_tiles.m_map[1] = std::set<hsplitter::tile_t>({1});
    node_tiles.m_map[2] = std::set<hsplitter::tile_t>({1});
    node_tiles.m_map[3] = std::set<hsplitter::tile_t>({1});
    node_tiles.freeze();
    way_tiles.freeze();
    extra_node_tiles.freeze();

    osmium::memory::Buffer rels(data, buffer_size, 0);

    push_back_rel(rels, 1, 1, true, 1, 1, {1, 2, 3}, {}, {});

    REQUIRE(std::distance(rels.begin(), rels.end()) == 1);

    auto it = rels.begin();
    auto pair = hsplitter::tiles_for_relations<map_t>(it, rels.end(), node_tiles, way_tiles, extra_node_tiles);
    map_t rel_tiles = std::move(pair.first);
    map_t extra_rel_tiles = std::move(pair.second);

    REQUIRE(rel_tiles.m_map.size() == 1);
    REQUIRE(rel_tiles.m_map.count(1) == 1);
    REQUIRE(rel_tiles.m_map[1].size() == 1);
    REQUIRE(rel_tiles.m_map[1].count(1) == 1);
    REQUIRE(extra_rel_tiles.m_map.empty());
开发者ID:zerebubuth,项目名称:osmium-history-splitter,代码行数:30,代码来源:test_splitter_relations.cpp


示例15: 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


示例16: 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


示例17: operator

                std::string operator()() {
                    osmium::apply(m_input_buffer.cbegin(), m_input_buffer.cend(), *this);

                    if (m_write_change_ops) {
                        open_close_op_tag();
                    }

                    std::string out;
                    std::swap(out, m_out);
                    return out;
                }
开发者ID:Gozhack,项目名称:osrm-backend,代码行数:11,代码来源:xml_output_format.hpp


示例18: possibly_purge_removed_members

 /**
  * Decide whether to purge removed members and then do it.
  *
  * Currently the purging is done every thousand calls.
  * This could probably be improved upon.
  */
 void possibly_purge_removed_members() {
     ++m_count_complete;
     if (m_count_complete > 10000) { // XXX
         const size_t size_before = m_members_buffer.committed();
         m_members_buffer.purge_removed(this);
         const size_t size_after = m_members_buffer.committed();
         double percent = static_cast<double>(size_before - size_after);
         percent /= size_before;
         percent *= 100;
         std::cerr << "PURGE (size before=" << size_before << " after=" << size_after << " purged=" << (size_before - size_after) << " / " << static_cast<int>(percent) << "%)\n";
         m_count_complete = 0;
     }
 }
开发者ID:Androidized,项目名称:osrm-backend,代码行数:19,代码来源:collector.hpp


示例19: run

                void run() final {
                    osmium::thread::set_thread_name("_osmium_opl_in");

                    line_by_line(*this);

                    if (m_buffer.committed() > 0) {
                        send_to_output_queue(std::move(m_buffer));
                    }
                }
开发者ID:KnockSoftware,项目名称:osrm-backend,代码行数:9,代码来源:opl_input_format.hpp


示例20: par

std::vector<Edge> parok()
{
    std::vector<Edge> par_lista;
    for(unsigned int i=0;i<utak.capacity();i++)
    {
        osmium::WayNodeList * utnodeok;
        utnodeok=&utak.get<osmium::Way>(i).nodes();
        for(unsigned int j=0;j<(*utnodeok).size()-1;j++)
        {
            Edge par(((*utnodeok)[j]),((*utnodeok)[j+1]));
            /*par.first=((*utnodeok)[j]).ref();
            par.second=((*utnodeok)[j+1]).ref();*/
            par_lista.push_back(par);
        }
    }
    return par_lista;
}
开发者ID:makacslajhar,项目名称:codename-petra,代码行数:17,代码来源:petra.cpp



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


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C++ routedescription::NameDescriptionRef类代码示例发布时间:2022-05-31
下一篇:
C++ io::Reader类代码示例发布时间:2022-05-31
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap