/usr/include/osmium/storage/byid/fixed_array.hpp is in libosmium-dev 0.0~20140910-9a069af-1+b1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 | #ifndef OSMIUM_STORAGE_BYID_FIXED_ARRAY_HPP
#define OSMIUM_STORAGE_BYID_FIXED_ARRAY_HPP
/*
Copyright 2012 Jochen Topf <jochen@topf.org> and others (see README).
This file is part of Osmium (https://github.com/joto/osmium).
Osmium is free software: you can redistribute it and/or modify it under the
terms of the GNU Lesser General Public License or (at your option) the GNU
General Public License as published by the Free Software Foundation, either
version 3 of the Licenses, or (at your option) any later version.
Osmium is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE. See the GNU Lesser General Public License and the GNU
General Public License for more details.
You should have received a copy of the Licenses along with Osmium. If not, see
<http://www.gnu.org/licenses/>.
*/
#include <cstdlib>
#include <osmium/storage/byid.hpp>
namespace Osmium {
namespace Storage {
namespace ById {
/**
* The FixedArray storage stores location in a huge array. The size of
* the array is given when initializing the object, it must be large
* enough to hold all items.
*
* Only use this store when you know beforehand how many IDs there are.
* It is mainly provided for cases where the more flexible Mmap storage
* class does not work.
*
* There is no range checking on accessing the store.
*
* If you are storing node coordinates, you'll need 8 bytes for each node.
* At the time of writing this, the largest node ID is about 1.3 billion,
* so you'll need about 10 GB of memory.
*
* Note that this storage class will only work on 64 bit systems if
* used for storing node coordinates. 32 bit systems just can't address
* that much memory!
*/
template <typename TValue>
class FixedArray : public Osmium::Storage::ById::Base<TValue> {
public:
/**
* Constructor.
*
* @param max_id One larger than the largest ID you will ever have.
* @exception std::bad_alloc Thrown when there is not enough memory.
*/
FixedArray(const uint64_t max_id) :
Base<TValue>(),
m_size(max_id) {
m_items = static_cast<TValue*>(malloc(sizeof(TValue) * max_id));
if (!m_items) {
throw std::bad_alloc();
}
}
~FixedArray() {
clear();
}
void set(const uint64_t id, const TValue value) {
m_items[id] = value;
}
const TValue operator[](const uint64_t id) const {
return m_items[id];
}
uint64_t size() const {
return m_size;
}
uint64_t used_memory() const {
return m_size * sizeof(TValue);
}
void clear() {
free(m_items);
m_items = NULL;
}
private:
uint64_t m_size;
TValue* m_items;
}; // class FixedArray
} // namespace ById
} // namespace Storage
} // namespace Osmium
#endif // OSMIUM_STORAGE_BYID_FIXED_ARRAY_HPP
|