Merge pull request #4334 from mathisloge/cmake-linting
adding auto formatting
This commit is contained in:
commit
14a5cc7e1a
66 changed files with 17297 additions and 14324 deletions
|
@ -30,7 +30,7 @@ BraceWrapping:
|
||||||
AfterFunction: true # see AllowShortFunctionsOnASingleLine
|
AfterFunction: true # see AllowShortFunctionsOnASingleLine
|
||||||
AfterNamespace: false
|
AfterNamespace: false
|
||||||
AfterStruct: true
|
AfterStruct: true
|
||||||
AfterExternBlock: true
|
AfterExternBlock: false
|
||||||
BeforeCatch: false
|
BeforeCatch: false
|
||||||
BeforeElse: true
|
BeforeElse: true
|
||||||
BeforeLambdaBody: false
|
BeforeLambdaBody: false
|
||||||
|
|
27
.github/workflows/build_test.yml
vendored
27
.github/workflows/build_test.yml
vendored
|
@ -9,68 +9,83 @@ on:
|
||||||
- "**"
|
- "**"
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
|
checkSource:
|
||||||
|
name: Check Source Code
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
- uses: actions/setup-python@v3
|
||||||
|
- uses: pre-commit/action@v3.0.0
|
||||||
|
|
||||||
windows:
|
windows:
|
||||||
|
needs: checkSource
|
||||||
name: Windows memory mapped
|
name: Windows memory mapped
|
||||||
uses: ./.github/workflows/windows.yml
|
uses: ./.github/workflows/windows.yml
|
||||||
with:
|
with:
|
||||||
VCPKG_SHA: f6af75acc923c833a5620943e3fc7d5e4930f0df
|
VCPKG_SHA: f6af75acc923c833a5620943e3fc7d5e4930f0df
|
||||||
NUGET_REGISTRY: https://nuget.pkg.github.com/mapnik/index.json
|
NUGET_REGISTRY: https://nuget.pkg.github.com/mapnik/index.json
|
||||||
NUGET_USERNAME: mapnik
|
NUGET_USERNAME: mapnik
|
||||||
USE_MEMORY_MAPPED_FILE: 'ON'
|
USE_MEMORY_MAPPED_FILE: "ON"
|
||||||
secrets:
|
secrets:
|
||||||
NUGET_REGISTRY_PAT: ${{ secrets.VCPKG_CACHE_PAT }}
|
NUGET_REGISTRY_PAT: ${{ secrets.VCPKG_CACHE_PAT }}
|
||||||
|
|
||||||
windows-mmf-off:
|
windows-mmf-off:
|
||||||
|
needs: checkSource
|
||||||
name: Windows file based
|
name: Windows file based
|
||||||
uses: ./.github/workflows/windows.yml
|
uses: ./.github/workflows/windows.yml
|
||||||
with:
|
with:
|
||||||
VCPKG_SHA: f6af75acc923c833a5620943e3fc7d5e4930f0df
|
VCPKG_SHA: f6af75acc923c833a5620943e3fc7d5e4930f0df
|
||||||
NUGET_REGISTRY: https://nuget.pkg.github.com/mapnik/index.json
|
NUGET_REGISTRY: https://nuget.pkg.github.com/mapnik/index.json
|
||||||
NUGET_USERNAME: mapnik
|
NUGET_USERNAME: mapnik
|
||||||
USE_MEMORY_MAPPED_FILE: 'OFF'
|
USE_MEMORY_MAPPED_FILE: "OFF"
|
||||||
secrets:
|
secrets:
|
||||||
NUGET_REGISTRY_PAT: ${{ secrets.VCPKG_CACHE_PAT }}
|
NUGET_REGISTRY_PAT: ${{ secrets.VCPKG_CACHE_PAT }}
|
||||||
|
|
||||||
ubuntu:
|
ubuntu:
|
||||||
|
needs: checkSource
|
||||||
name: Linux memory mapped
|
name: Linux memory mapped
|
||||||
uses: ./.github/workflows/ubuntu.yml
|
uses: ./.github/workflows/ubuntu.yml
|
||||||
with:
|
with:
|
||||||
VCPKG_SHA: f6af75acc923c833a5620943e3fc7d5e4930f0df
|
VCPKG_SHA: f6af75acc923c833a5620943e3fc7d5e4930f0df
|
||||||
NUGET_REGISTRY: https://nuget.pkg.github.com/mapnik/index.json
|
NUGET_REGISTRY: https://nuget.pkg.github.com/mapnik/index.json
|
||||||
NUGET_USERNAME: mapnik
|
NUGET_USERNAME: mapnik
|
||||||
USE_MEMORY_MAPPED_FILE: 'ON'
|
USE_MEMORY_MAPPED_FILE: "ON"
|
||||||
secrets:
|
secrets:
|
||||||
NUGET_REGISTRY_PAT: ${{ secrets.VCPKG_CACHE_PAT }}
|
NUGET_REGISTRY_PAT: ${{ secrets.VCPKG_CACHE_PAT }}
|
||||||
|
|
||||||
ubuntu-mmf-off:
|
ubuntu-mmf-off:
|
||||||
|
needs: checkSource
|
||||||
name: Linux file based
|
name: Linux file based
|
||||||
uses: ./.github/workflows/ubuntu.yml
|
uses: ./.github/workflows/ubuntu.yml
|
||||||
with:
|
with:
|
||||||
VCPKG_SHA: f6af75acc923c833a5620943e3fc7d5e4930f0df
|
VCPKG_SHA: f6af75acc923c833a5620943e3fc7d5e4930f0df
|
||||||
NUGET_REGISTRY: https://nuget.pkg.github.com/mapnik/index.json
|
NUGET_REGISTRY: https://nuget.pkg.github.com/mapnik/index.json
|
||||||
NUGET_USERNAME: mapnik
|
NUGET_USERNAME: mapnik
|
||||||
USE_MEMORY_MAPPED_FILE: 'OFF'
|
USE_MEMORY_MAPPED_FILE: "OFF"
|
||||||
secrets:
|
secrets:
|
||||||
NUGET_REGISTRY_PAT: ${{ secrets.VCPKG_CACHE_PAT }}
|
NUGET_REGISTRY_PAT: ${{ secrets.VCPKG_CACHE_PAT }}
|
||||||
|
|
||||||
macos:
|
macos:
|
||||||
|
needs: checkSource
|
||||||
name: MacOS memory mapped
|
name: MacOS memory mapped
|
||||||
uses: ./.github/workflows/macos.yml
|
uses: ./.github/workflows/macos.yml
|
||||||
with:
|
with:
|
||||||
VCPKG_SHA: f6af75acc923c833a5620943e3fc7d5e4930f0df
|
VCPKG_SHA: f6af75acc923c833a5620943e3fc7d5e4930f0df
|
||||||
NUGET_REGISTRY: https://nuget.pkg.github.com/mapnik/index.json
|
NUGET_REGISTRY: https://nuget.pkg.github.com/mapnik/index.json
|
||||||
NUGET_USERNAME: mapnik
|
NUGET_USERNAME: mapnik
|
||||||
USE_MEMORY_MAPPED_FILE: 'ON'
|
USE_MEMORY_MAPPED_FILE: "ON"
|
||||||
secrets:
|
secrets:
|
||||||
NUGET_REGISTRY_PAT: ${{ secrets.VCPKG_CACHE_PAT }}
|
NUGET_REGISTRY_PAT: ${{ secrets.VCPKG_CACHE_PAT }}
|
||||||
|
|
||||||
macos-mmf-off:
|
macos-mmf-off:
|
||||||
|
needs: checkSource
|
||||||
name: MacOS file based
|
name: MacOS file based
|
||||||
uses: ./.github/workflows/macos.yml
|
uses: ./.github/workflows/macos.yml
|
||||||
with:
|
with:
|
||||||
VCPKG_SHA: f6af75acc923c833a5620943e3fc7d5e4930f0df
|
VCPKG_SHA: f6af75acc923c833a5620943e3fc7d5e4930f0df
|
||||||
NUGET_REGISTRY: https://nuget.pkg.github.com/mapnik/index.json
|
NUGET_REGISTRY: https://nuget.pkg.github.com/mapnik/index.json
|
||||||
NUGET_USERNAME: mapnik
|
NUGET_USERNAME: mapnik
|
||||||
USE_MEMORY_MAPPED_FILE: 'OFF'
|
USE_MEMORY_MAPPED_FILE: "OFF"
|
||||||
secrets:
|
secrets:
|
||||||
NUGET_REGISTRY_PAT: ${{ secrets.VCPKG_CACHE_PAT }}
|
NUGET_REGISTRY_PAT: ${{ secrets.VCPKG_CACHE_PAT }}
|
||||||
|
|
16
.pre-commit-config.yaml
Normal file
16
.pre-commit-config.yaml
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
# See https://pre-commit.com for more information
|
||||||
|
# See https://pre-commit.com/hooks.html for more hooks
|
||||||
|
repos:
|
||||||
|
- repo: https://github.com/pre-commit/pre-commit-hooks
|
||||||
|
rev: v4.3.0
|
||||||
|
hooks:
|
||||||
|
- id: trailing-whitespace
|
||||||
|
files: ^.*\.cmake|CMakeLists\.txt$
|
||||||
|
- id: end-of-file-fixer
|
||||||
|
files: ^.*\.cmake|CMakeLists\.txt$
|
||||||
|
|
||||||
|
- repo: https://github.com/pre-commit/mirrors-clang-format
|
||||||
|
rev: v14.0.6
|
||||||
|
hooks:
|
||||||
|
- id: clang-format
|
||||||
|
types_or: [c++, c]
|
1
deps/agg/.clang-format
vendored
Normal file
1
deps/agg/.clang-format
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
DisableFormat: true
|
1
deps/boost/.clang-format
vendored
Normal file
1
deps/boost/.clang-format
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
DisableFormat: true
|
1
deps/mapbox/.clang-format
vendored
Normal file
1
deps/mapbox/.clang-format
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
DisableFormat: true
|
726
deps/mapnik/sparsehash/internal/densehashtable.h
vendored
726
deps/mapnik/sparsehash/internal/densehashtable.h
vendored
File diff suppressed because it is too large
Load diff
202
deps/mapnik/sparsehash/internal/hashtable-common.h
vendored
202
deps/mapnik/sparsehash/internal/hashtable-common.h
vendored
|
@ -80,14 +80,14 @@ namespace sparsehash_internal {
|
||||||
// ----- low-level I/O for FILE* ----
|
// ----- low-level I/O for FILE* ----
|
||||||
|
|
||||||
template<typename Ignored>
|
template<typename Ignored>
|
||||||
inline bool read_data_internal(Ignored*, FILE* fp,
|
inline bool read_data_internal(Ignored*, FILE* fp, void* data, size_t length)
|
||||||
void* data, size_t length) {
|
{
|
||||||
return fread(data, length, 1, fp) == 1;
|
return fread(data, length, 1, fp) == 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename Ignored>
|
template<typename Ignored>
|
||||||
inline bool write_data_internal(Ignored*, FILE* fp,
|
inline bool write_data_internal(Ignored*, FILE* fp, const void* data, size_t length)
|
||||||
const void* data, size_t length) {
|
{
|
||||||
return fwrite(data, length, 1, fp) == 1;
|
return fwrite(data, length, 1, fp) == 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -98,24 +98,24 @@ inline bool write_data_internal(Ignored*, FILE* fp,
|
||||||
// it's only legal to delay the instantiation the way we want to if
|
// it's only legal to delay the instantiation the way we want to if
|
||||||
// the istream/ostream is a template type. So we jump through hoops.
|
// the istream/ostream is a template type. So we jump through hoops.
|
||||||
template<typename ISTREAM>
|
template<typename ISTREAM>
|
||||||
inline bool read_data_internal_for_istream(ISTREAM* fp,
|
inline bool read_data_internal_for_istream(ISTREAM* fp, void* data, size_t length)
|
||||||
void* data, size_t length) {
|
{
|
||||||
return fp->read(reinterpret_cast<char*>(data), length).good();
|
return fp->read(reinterpret_cast<char*>(data), length).good();
|
||||||
}
|
}
|
||||||
template<typename Ignored>
|
template<typename Ignored>
|
||||||
inline bool read_data_internal(Ignored*, std::istream* fp,
|
inline bool read_data_internal(Ignored*, std::istream* fp, void* data, size_t length)
|
||||||
void* data, size_t length) {
|
{
|
||||||
return read_data_internal_for_istream(fp, data, length);
|
return read_data_internal_for_istream(fp, data, length);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename OSTREAM>
|
template<typename OSTREAM>
|
||||||
inline bool write_data_internal_for_ostream(OSTREAM* fp,
|
inline bool write_data_internal_for_ostream(OSTREAM* fp, const void* data, size_t length)
|
||||||
const void* data, size_t length) {
|
{
|
||||||
return fp->write(reinterpret_cast<const char*>(data), length).good();
|
return fp->write(reinterpret_cast<const char*>(data), length).good();
|
||||||
}
|
}
|
||||||
template<typename Ignored>
|
template<typename Ignored>
|
||||||
inline bool write_data_internal(Ignored*, std::ostream* fp,
|
inline bool write_data_internal(Ignored*, std::ostream* fp, const void* data, size_t length)
|
||||||
const void* data, size_t length) {
|
{
|
||||||
return write_data_internal_for_ostream(fp, data, length);
|
return write_data_internal_for_ostream(fp, data, length);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -124,28 +124,30 @@ inline bool write_data_internal(Ignored*, std::ostream* fp,
|
||||||
// The INPUT type needs to support a Read() method that takes a
|
// The INPUT type needs to support a Read() method that takes a
|
||||||
// buffer and a length and returns the number of bytes read.
|
// buffer and a length and returns the number of bytes read.
|
||||||
template<typename INPUT>
|
template<typename INPUT>
|
||||||
inline bool read_data_internal(INPUT* fp, void*,
|
inline bool read_data_internal(INPUT* fp, void*, void* data, size_t length)
|
||||||
void* data, size_t length) {
|
{
|
||||||
return static_cast<size_t>(fp->Read(data, length)) == length;
|
return static_cast<size_t>(fp->Read(data, length)) == length;
|
||||||
}
|
}
|
||||||
|
|
||||||
// The OUTPUT type needs to support a Write() operation that takes
|
// The OUTPUT type needs to support a Write() operation that takes
|
||||||
// a buffer and a length and returns the number of bytes written.
|
// a buffer and a length and returns the number of bytes written.
|
||||||
template<typename OUTPUT>
|
template<typename OUTPUT>
|
||||||
inline bool write_data_internal(OUTPUT* fp, void*,
|
inline bool write_data_internal(OUTPUT* fp, void*, const void* data, size_t length)
|
||||||
const void* data, size_t length) {
|
{
|
||||||
return static_cast<size_t>(fp->Write(data, length)) == length;
|
return static_cast<size_t>(fp->Write(data, length)) == length;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----- low-level I/O: the public API ----
|
// ----- low-level I/O: the public API ----
|
||||||
|
|
||||||
template<typename INPUT>
|
template<typename INPUT>
|
||||||
inline bool read_data(INPUT* fp, void* data, size_t length) {
|
inline bool read_data(INPUT* fp, void* data, size_t length)
|
||||||
|
{
|
||||||
return read_data_internal(fp, fp, data, length);
|
return read_data_internal(fp, fp, data, length);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename OUTPUT>
|
template<typename OUTPUT>
|
||||||
inline bool write_data(OUTPUT* fp, const void* data, size_t length) {
|
inline bool write_data(OUTPUT* fp, const void* data, size_t length)
|
||||||
|
{
|
||||||
return write_data_internal(fp, fp, data, length);
|
return write_data_internal(fp, fp, data, length);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -155,23 +157,29 @@ inline bool write_data(OUTPUT* fp, const void* data, size_t length) {
|
||||||
// and load on a 64-bit system). Excess bytes are taken to be 0.
|
// and load on a 64-bit system). Excess bytes are taken to be 0.
|
||||||
// INPUT and OUTPUT must match legal inputs to read/write_data (above).
|
// INPUT and OUTPUT must match legal inputs to read/write_data (above).
|
||||||
template<typename INPUT, typename IntType>
|
template<typename INPUT, typename IntType>
|
||||||
bool read_bigendian_number(INPUT* fp, IntType* value, size_t length) {
|
bool read_bigendian_number(INPUT* fp, IntType* value, size_t length)
|
||||||
|
{
|
||||||
*value = 0;
|
*value = 0;
|
||||||
unsigned char byte;
|
unsigned char byte;
|
||||||
for (size_t i = 0; i < length; ++i) {
|
for (size_t i = 0; i < length; ++i)
|
||||||
if (!read_data(fp, &byte, sizeof(byte))) return false;
|
{
|
||||||
|
if (!read_data(fp, &byte, sizeof(byte)))
|
||||||
|
return false;
|
||||||
*value |= static_cast<IntType>(byte) << ((length - 1 - i) * 8);
|
*value |= static_cast<IntType>(byte) << ((length - 1 - i) * 8);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename OUTPUT, typename IntType>
|
template<typename OUTPUT, typename IntType>
|
||||||
bool write_bigendian_number(OUTPUT* fp, IntType value, size_t length) {
|
bool write_bigendian_number(OUTPUT* fp, IntType value, size_t length)
|
||||||
|
{
|
||||||
unsigned char byte;
|
unsigned char byte;
|
||||||
for (size_t i = 0; i < length; ++i) {
|
for (size_t i = 0; i < length; ++i)
|
||||||
byte = (sizeof(value) <= length-1 - i)
|
{
|
||||||
? 0 : static_cast<unsigned char>((value >> ((length-1 - i) * 8)) & 255);
|
byte =
|
||||||
if (!write_data(fp, &byte, sizeof(byte))) return false;
|
(sizeof(value) <= length - 1 - i) ? 0 : static_cast<unsigned char>((value >> ((length - 1 - i) * 8)) & 255);
|
||||||
|
if (!write_data(fp, &byte, sizeof(byte)))
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -181,19 +189,22 @@ bool write_bigendian_number(OUTPUT* fp, IntType value, size_t length) {
|
||||||
// value_type is a POD type that contains no pointers. Note,
|
// value_type is a POD type that contains no pointers. Note,
|
||||||
// however, we don't try to normalize endianness.
|
// however, we don't try to normalize endianness.
|
||||||
// This is the type used for NopointerSerializer.
|
// This is the type used for NopointerSerializer.
|
||||||
template <typename value_type> struct pod_serializer {
|
template<typename value_type>
|
||||||
|
struct pod_serializer
|
||||||
|
{
|
||||||
template<typename INPUT>
|
template<typename INPUT>
|
||||||
bool operator()(INPUT* fp, value_type* value) const {
|
bool operator()(INPUT* fp, value_type* value) const
|
||||||
|
{
|
||||||
return read_data(fp, value, sizeof(*value));
|
return read_data(fp, value, sizeof(*value));
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename OUTPUT>
|
template<typename OUTPUT>
|
||||||
bool operator()(OUTPUT* fp, const value_type& value) const {
|
bool operator()(OUTPUT* fp, const value_type& value) const
|
||||||
|
{
|
||||||
return write_data(fp, &value, sizeof(value));
|
return write_data(fp, &value, sizeof(value));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
// Settings contains parameters for growing and shrinking the table.
|
// Settings contains parameters for growing and shrinking the table.
|
||||||
// It also packages zero-size functor (ie. hasher).
|
// It also packages zero-size functor (ie. hasher).
|
||||||
//
|
//
|
||||||
|
@ -206,97 +217,62 @@ template <typename value_type> struct pod_serializer {
|
||||||
// for sure that the hash is the identity hash. If it's not, this
|
// for sure that the hash is the identity hash. If it's not, this
|
||||||
// is needless work (and possibly, though not likely, harmful).
|
// is needless work (and possibly, though not likely, harmful).
|
||||||
|
|
||||||
template<typename Key, typename HashFunc,
|
template<typename Key, typename HashFunc, typename SizeType, int HT_MIN_BUCKETS>
|
||||||
typename SizeType, int HT_MIN_BUCKETS>
|
class sh_hashtable_settings : public HashFunc
|
||||||
class sh_hashtable_settings : public HashFunc {
|
{
|
||||||
public:
|
public:
|
||||||
typedef Key key_type;
|
typedef Key key_type;
|
||||||
typedef HashFunc hasher;
|
typedef HashFunc hasher;
|
||||||
typedef SizeType size_type;
|
typedef SizeType size_type;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
sh_hashtable_settings(const hasher& hf,
|
sh_hashtable_settings(const hasher& hf, const float ht_occupancy_flt, const float ht_empty_flt)
|
||||||
const float ht_occupancy_flt,
|
: hasher(hf)
|
||||||
const float ht_empty_flt)
|
, enlarge_threshold_(0)
|
||||||
: hasher(hf),
|
, shrink_threshold_(0)
|
||||||
enlarge_threshold_(0),
|
, consider_shrink_(false)
|
||||||
shrink_threshold_(0),
|
, use_empty_(false)
|
||||||
consider_shrink_(false),
|
, use_deleted_(false)
|
||||||
use_empty_(false),
|
, num_ht_copies_(0)
|
||||||
use_deleted_(false),
|
{
|
||||||
num_ht_copies_(0) {
|
|
||||||
set_enlarge_factor(ht_occupancy_flt);
|
set_enlarge_factor(ht_occupancy_flt);
|
||||||
set_shrink_factor(ht_empty_flt);
|
set_shrink_factor(ht_empty_flt);
|
||||||
}
|
}
|
||||||
|
|
||||||
size_type hash(const key_type& v) const {
|
size_type hash(const key_type& v) const
|
||||||
|
{
|
||||||
// We munge the hash value when we don't trust hasher::operator().
|
// We munge the hash value when we don't trust hasher::operator().
|
||||||
return hash_munger<Key>::MungedHash(hasher::operator()(v));
|
return hash_munger<Key>::MungedHash(hasher::operator()(v));
|
||||||
}
|
}
|
||||||
|
|
||||||
float enlarge_factor() const {
|
float enlarge_factor() const { return enlarge_factor_; }
|
||||||
return enlarge_factor_;
|
void set_enlarge_factor(float f) { enlarge_factor_ = f; }
|
||||||
}
|
float shrink_factor() const { return shrink_factor_; }
|
||||||
void set_enlarge_factor(float f) {
|
void set_shrink_factor(float f) { shrink_factor_ = f; }
|
||||||
enlarge_factor_ = f;
|
|
||||||
}
|
|
||||||
float shrink_factor() const {
|
|
||||||
return shrink_factor_;
|
|
||||||
}
|
|
||||||
void set_shrink_factor(float f) {
|
|
||||||
shrink_factor_ = f;
|
|
||||||
}
|
|
||||||
|
|
||||||
size_type enlarge_threshold() const {
|
size_type enlarge_threshold() const { return enlarge_threshold_; }
|
||||||
return enlarge_threshold_;
|
void set_enlarge_threshold(size_type t) { enlarge_threshold_ = t; }
|
||||||
}
|
size_type shrink_threshold() const { return shrink_threshold_; }
|
||||||
void set_enlarge_threshold(size_type t) {
|
void set_shrink_threshold(size_type t) { shrink_threshold_ = t; }
|
||||||
enlarge_threshold_ = t;
|
|
||||||
}
|
|
||||||
size_type shrink_threshold() const {
|
|
||||||
return shrink_threshold_;
|
|
||||||
}
|
|
||||||
void set_shrink_threshold(size_type t) {
|
|
||||||
shrink_threshold_ = t;
|
|
||||||
}
|
|
||||||
|
|
||||||
size_type enlarge_size(size_type x) const {
|
size_type enlarge_size(size_type x) const { return static_cast<size_type>(x * enlarge_factor_); }
|
||||||
return static_cast<size_type>(x * enlarge_factor_);
|
size_type shrink_size(size_type x) const { return static_cast<size_type>(x * shrink_factor_); }
|
||||||
}
|
|
||||||
size_type shrink_size(size_type x) const {
|
|
||||||
return static_cast<size_type>(x * shrink_factor_);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool consider_shrink() const {
|
bool consider_shrink() const { return consider_shrink_; }
|
||||||
return consider_shrink_;
|
void set_consider_shrink(bool t) { consider_shrink_ = t; }
|
||||||
}
|
|
||||||
void set_consider_shrink(bool t) {
|
|
||||||
consider_shrink_ = t;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool use_empty() const {
|
bool use_empty() const { return use_empty_; }
|
||||||
return use_empty_;
|
void set_use_empty(bool t) { use_empty_ = t; }
|
||||||
}
|
|
||||||
void set_use_empty(bool t) {
|
|
||||||
use_empty_ = t;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool use_deleted() const {
|
bool use_deleted() const { return use_deleted_; }
|
||||||
return use_deleted_;
|
void set_use_deleted(bool t) { use_deleted_ = t; }
|
||||||
}
|
|
||||||
void set_use_deleted(bool t) {
|
|
||||||
use_deleted_ = t;
|
|
||||||
}
|
|
||||||
|
|
||||||
size_type num_ht_copies() const {
|
size_type num_ht_copies() const { return static_cast<size_type>(num_ht_copies_); }
|
||||||
return static_cast<size_type>(num_ht_copies_);
|
void inc_num_ht_copies() { ++num_ht_copies_; }
|
||||||
}
|
|
||||||
void inc_num_ht_copies() {
|
|
||||||
++num_ht_copies_;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Reset the enlarge and shrink thresholds
|
// Reset the enlarge and shrink thresholds
|
||||||
void reset_thresholds(size_type num_buckets) {
|
void reset_thresholds(size_type num_buckets)
|
||||||
|
{
|
||||||
set_enlarge_threshold(enlarge_size(num_buckets));
|
set_enlarge_threshold(enlarge_size(num_buckets));
|
||||||
set_shrink_threshold(shrink_size(num_buckets));
|
set_shrink_threshold(shrink_size(num_buckets));
|
||||||
// whatever caused us to reset already considered
|
// whatever caused us to reset already considered
|
||||||
|
@ -305,7 +281,8 @@ class sh_hashtable_settings : public HashFunc {
|
||||||
|
|
||||||
// Caller is resposible for calling reset_threshold right after
|
// Caller is resposible for calling reset_threshold right after
|
||||||
// set_resizing_parameters.
|
// set_resizing_parameters.
|
||||||
void set_resizing_parameters(float shrink, float grow) {
|
void set_resizing_parameters(float shrink, float grow)
|
||||||
|
{
|
||||||
assert(shrink >= 0.0);
|
assert(shrink >= 0.0);
|
||||||
assert(grow <= 1.0);
|
assert(grow <= 1.0);
|
||||||
if (shrink > grow / 2.0f)
|
if (shrink > grow / 2.0f)
|
||||||
|
@ -316,14 +293,16 @@ class sh_hashtable_settings : public HashFunc {
|
||||||
|
|
||||||
// This is the smallest size a hashtable can be without being too crowded
|
// This is the smallest size a hashtable can be without being too crowded
|
||||||
// If you like, you can give a min #buckets as well as a min #elts
|
// If you like, you can give a min #buckets as well as a min #elts
|
||||||
size_type min_buckets(size_type num_elts, size_type min_buckets_wanted) {
|
size_type min_buckets(size_type num_elts, size_type min_buckets_wanted)
|
||||||
|
{
|
||||||
float enlarge = enlarge_factor();
|
float enlarge = enlarge_factor();
|
||||||
size_type sz = HT_MIN_BUCKETS; // min buckets allowed
|
size_type sz = HT_MIN_BUCKETS; // min buckets allowed
|
||||||
while ( sz < min_buckets_wanted ||
|
while (sz < min_buckets_wanted || num_elts >= static_cast<size_type>(sz * enlarge))
|
||||||
num_elts >= static_cast<size_type>(sz * enlarge) ) {
|
{
|
||||||
// This just prevents overflowing size_type, since sz can exceed
|
// This just prevents overflowing size_type, since sz can exceed
|
||||||
// max_size() here.
|
// max_size() here.
|
||||||
if (static_cast<size_type>(sz * 2) < sz) {
|
if (static_cast<size_type>(sz * 2) < sz)
|
||||||
|
{
|
||||||
throw std::length_error("resize overflow"); // protect against overflow
|
throw std::length_error("resize overflow"); // protect against overflow
|
||||||
}
|
}
|
||||||
sz *= 2;
|
sz *= 2;
|
||||||
|
@ -332,16 +311,19 @@ class sh_hashtable_settings : public HashFunc {
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
template<class HashKey> class hash_munger {
|
template<class HashKey>
|
||||||
|
class hash_munger
|
||||||
|
{
|
||||||
public:
|
public:
|
||||||
static size_t MungedHash(size_t hash) {
|
static size_t MungedHash(size_t hash) { return hash; }
|
||||||
return hash;
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
// This matches when the hashtable key is a pointer.
|
// This matches when the hashtable key is a pointer.
|
||||||
template<class HashKey> class hash_munger<HashKey*> {
|
template<class HashKey>
|
||||||
|
class hash_munger<HashKey*>
|
||||||
|
{
|
||||||
public:
|
public:
|
||||||
static size_t MungedHash(size_t hash) {
|
static size_t MungedHash(size_t hash)
|
||||||
|
{
|
||||||
// TODO(csilvers): consider rotating instead:
|
// TODO(csilvers): consider rotating instead:
|
||||||
// static const int shift = (sizeof(void *) == 4) ? 2 : 3;
|
// static const int shift = (sizeof(void *) == 4) ? 2 : 3;
|
||||||
// return (hash << (sizeof(hash) * 8) - shift)) | (hash >> shift);
|
// return (hash << (sizeof(hash) * 8) - shift)) | (hash >> shift);
|
||||||
|
|
|
@ -40,7 +40,8 @@
|
||||||
_START_GOOGLE_NAMESPACE_
|
_START_GOOGLE_NAMESPACE_
|
||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
class libc_allocator_with_realloc {
|
class libc_allocator_with_realloc
|
||||||
|
{
|
||||||
public:
|
public:
|
||||||
typedef T value_type;
|
typedef T value_type;
|
||||||
typedef size_t size_type;
|
typedef size_t size_type;
|
||||||
|
@ -58,37 +59,30 @@ class libc_allocator_with_realloc {
|
||||||
pointer address(reference r) const { return &r; }
|
pointer address(reference r) const { return &r; }
|
||||||
const_pointer address(const_reference r) const { return &r; }
|
const_pointer address(const_reference r) const { return &r; }
|
||||||
|
|
||||||
pointer allocate(size_type n, const_pointer = 0) {
|
pointer allocate(size_type n, const_pointer = 0) { return static_cast<pointer>(malloc(n * sizeof(value_type))); }
|
||||||
return static_cast<pointer>(malloc(n * sizeof(value_type)));
|
void deallocate(pointer p, size_type) { free(p); }
|
||||||
}
|
pointer reallocate(pointer p, size_type n) { return static_cast<pointer>(realloc(p, n * sizeof(value_type))); }
|
||||||
void deallocate(pointer p, size_type) {
|
|
||||||
free(p);
|
|
||||||
}
|
|
||||||
pointer reallocate(pointer p, size_type n) {
|
|
||||||
return static_cast<pointer>(realloc(p, n * sizeof(value_type)));
|
|
||||||
}
|
|
||||||
|
|
||||||
size_type max_size() const {
|
size_type max_size() const { return static_cast<size_type>(-1) / sizeof(value_type); }
|
||||||
return static_cast<size_type>(-1) / sizeof(value_type);
|
|
||||||
}
|
|
||||||
|
|
||||||
void construct(pointer p, const value_type& val) {
|
void construct(pointer p, const value_type& val) { new (p) value_type(val); }
|
||||||
new(p) value_type(val);
|
|
||||||
}
|
|
||||||
void destroy(pointer p) { p->~value_type(); }
|
void destroy(pointer p) { p->~value_type(); }
|
||||||
|
|
||||||
template<class U>
|
template<class U>
|
||||||
libc_allocator_with_realloc(const libc_allocator_with_realloc<U>&) {}
|
libc_allocator_with_realloc(const libc_allocator_with_realloc<U>&)
|
||||||
|
{}
|
||||||
|
|
||||||
template<class U>
|
template<class U>
|
||||||
struct rebind {
|
struct rebind
|
||||||
|
{
|
||||||
typedef libc_allocator_with_realloc<U> other;
|
typedef libc_allocator_with_realloc<U> other;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
// libc_allocator_with_realloc<void> specialization.
|
// libc_allocator_with_realloc<void> specialization.
|
||||||
template<>
|
template<>
|
||||||
class libc_allocator_with_realloc<void> {
|
class libc_allocator_with_realloc<void>
|
||||||
|
{
|
||||||
public:
|
public:
|
||||||
typedef void value_type;
|
typedef void value_type;
|
||||||
typedef size_t size_type;
|
typedef size_t size_type;
|
||||||
|
@ -97,20 +91,21 @@ class libc_allocator_with_realloc<void> {
|
||||||
typedef const void* const_pointer;
|
typedef const void* const_pointer;
|
||||||
|
|
||||||
template<class U>
|
template<class U>
|
||||||
struct rebind {
|
struct rebind
|
||||||
|
{
|
||||||
typedef libc_allocator_with_realloc<U> other;
|
typedef libc_allocator_with_realloc<U> other;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
inline bool operator==(const libc_allocator_with_realloc<T>&,
|
inline bool operator==(const libc_allocator_with_realloc<T>&, const libc_allocator_with_realloc<T>&)
|
||||||
const libc_allocator_with_realloc<T>&) {
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
inline bool operator!=(const libc_allocator_with_realloc<T>&,
|
inline bool operator!=(const libc_allocator_with_realloc<T>&, const libc_allocator_with_realloc<T>&)
|
||||||
const libc_allocator_with_realloc<T>&) {
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
37
deps/mapnik/sparsehash/template_util.h
vendored
37
deps/mapnik/sparsehash/template_util.h
vendored
|
@ -56,13 +56,15 @@ _START_GOOGLE_NAMESPACE_
|
||||||
// sizeof(big_)
|
// sizeof(big_)
|
||||||
typedef char small_;
|
typedef char small_;
|
||||||
|
|
||||||
struct big_ {
|
struct big_
|
||||||
|
{
|
||||||
char dummy[2];
|
char dummy[2];
|
||||||
};
|
};
|
||||||
|
|
||||||
// Identity metafunction.
|
// Identity metafunction.
|
||||||
template<class T>
|
template<class T>
|
||||||
struct identity_ {
|
struct identity_
|
||||||
|
{
|
||||||
typedef T type;
|
typedef T type;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -72,14 +74,15 @@ struct identity_ {
|
||||||
// general integer_constant for compatibility with tr1.
|
// general integer_constant for compatibility with tr1.
|
||||||
|
|
||||||
template<class T, T v>
|
template<class T, T v>
|
||||||
struct integral_constant {
|
struct integral_constant
|
||||||
|
{
|
||||||
static const T value = v;
|
static const T value = v;
|
||||||
typedef T value_type;
|
typedef T value_type;
|
||||||
typedef integral_constant<T, v> type;
|
typedef integral_constant<T, v> type;
|
||||||
};
|
};
|
||||||
|
|
||||||
template <class T, T v> const T integral_constant<T, v>::value;
|
template<class T, T v>
|
||||||
|
const T integral_constant<T, v>::value;
|
||||||
|
|
||||||
// Abbreviations: true_type and false_type are structs that represent boolean
|
// Abbreviations: true_type and false_type are structs that represent boolean
|
||||||
// true and false values. Also define the boost::mpl versions of those names,
|
// true and false values. Also define the boost::mpl versions of those names,
|
||||||
|
@ -93,41 +96,41 @@ typedef false_type false_;
|
||||||
// if_<cond, A, B> is a compile time evaluation of cond.
|
// if_<cond, A, B> is a compile time evaluation of cond.
|
||||||
// if_<>::type contains A if cond is true, B otherwise.
|
// if_<>::type contains A if cond is true, B otherwise.
|
||||||
template<bool cond, typename A, typename B>
|
template<bool cond, typename A, typename B>
|
||||||
struct if_{
|
struct if_
|
||||||
|
{
|
||||||
typedef A type;
|
typedef A type;
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename A, typename B>
|
template<typename A, typename B>
|
||||||
struct if_<false, A, B> {
|
struct if_<false, A, B>
|
||||||
|
{
|
||||||
typedef B type;
|
typedef B type;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
// type_equals_ is a template type comparator, similar to Loki IsSameType.
|
// type_equals_ is a template type comparator, similar to Loki IsSameType.
|
||||||
// type_equals_<A, B>::value is true iff "A" is the same type as "B".
|
// type_equals_<A, B>::value is true iff "A" is the same type as "B".
|
||||||
//
|
//
|
||||||
// New code should prefer base::is_same, defined in base/type_traits.h.
|
// New code should prefer base::is_same, defined in base/type_traits.h.
|
||||||
// It is functionally identical, but is_same is the standard spelling.
|
// It is functionally identical, but is_same is the standard spelling.
|
||||||
template<typename A, typename B>
|
template<typename A, typename B>
|
||||||
struct type_equals_ : public false_ {
|
struct type_equals_ : public false_
|
||||||
};
|
{};
|
||||||
|
|
||||||
template<typename A>
|
template<typename A>
|
||||||
struct type_equals_<A, A> : public true_ {
|
struct type_equals_<A, A> : public true_
|
||||||
};
|
{};
|
||||||
|
|
||||||
// and_ is a template && operator.
|
// and_ is a template && operator.
|
||||||
// and_<A, B>::value evaluates "A::value && B::value".
|
// and_<A, B>::value evaluates "A::value && B::value".
|
||||||
template<typename A, typename B>
|
template<typename A, typename B>
|
||||||
struct and_ : public integral_constant<bool, (A::value && B::value)> {
|
struct and_ : public integral_constant<bool, (A::value && B::value)>
|
||||||
};
|
{};
|
||||||
|
|
||||||
// or_ is a template || operator.
|
// or_ is a template || operator.
|
||||||
// or_<A, B>::value evaluates "A::value || B::value".
|
// or_<A, B>::value evaluates "A::value || B::value".
|
||||||
template<typename A, typename B>
|
template<typename A, typename B>
|
||||||
struct or_ : public integral_constant<bool, (A::value || B::value)> {
|
struct or_ : public integral_constant<bool, (A::value || B::value)>
|
||||||
};
|
{};
|
||||||
|
|
||||||
|
|
||||||
_END_GOOGLE_NAMESPACE_
|
_END_GOOGLE_NAMESPACE_
|
||||||
|
|
||||||
|
|
437
deps/mapnik/sparsehash/type_traits.h
vendored
437
deps/mapnik/sparsehash/type_traits.h
vendored
|
@ -64,98 +64,180 @@
|
||||||
|
|
||||||
_START_GOOGLE_NAMESPACE_
|
_START_GOOGLE_NAMESPACE_
|
||||||
|
|
||||||
template <class T> struct is_integral;
|
template<class T>
|
||||||
template <class T> struct is_floating_point;
|
struct is_integral;
|
||||||
template <class T> struct is_pointer;
|
template<class T>
|
||||||
|
struct is_floating_point;
|
||||||
|
template<class T>
|
||||||
|
struct is_pointer;
|
||||||
// MSVC can't compile this correctly, and neither can gcc 3.3.5 (at least)
|
// MSVC can't compile this correctly, and neither can gcc 3.3.5 (at least)
|
||||||
#if !defined(_MSC_VER) && !(defined(__GNUC__) && __GNUC__ <= 3)
|
#if !defined(_MSC_VER) && !(defined(__GNUC__) && __GNUC__ <= 3)
|
||||||
// is_enum uses is_convertible, which is not available on MSVC.
|
// is_enum uses is_convertible, which is not available on MSVC.
|
||||||
template <class T> struct is_enum;
|
template<class T>
|
||||||
|
struct is_enum;
|
||||||
#endif
|
#endif
|
||||||
template <class T> struct is_reference;
|
template<class T>
|
||||||
template <class T> struct is_pod;
|
struct is_reference;
|
||||||
template <class T> struct has_trivial_constructor;
|
template<class T>
|
||||||
template <class T> struct has_trivial_copy;
|
struct is_pod;
|
||||||
template <class T> struct has_trivial_assign;
|
template<class T>
|
||||||
template <class T> struct has_trivial_destructor;
|
struct has_trivial_constructor;
|
||||||
template <class T> struct remove_const;
|
template<class T>
|
||||||
template <class T> struct remove_volatile;
|
struct has_trivial_copy;
|
||||||
template <class T> struct remove_cv;
|
template<class T>
|
||||||
template <class T> struct remove_reference;
|
struct has_trivial_assign;
|
||||||
template <class T> struct add_reference;
|
template<class T>
|
||||||
template <class T> struct remove_pointer;
|
struct has_trivial_destructor;
|
||||||
template <class T, class U> struct is_same;
|
template<class T>
|
||||||
|
struct remove_const;
|
||||||
|
template<class T>
|
||||||
|
struct remove_volatile;
|
||||||
|
template<class T>
|
||||||
|
struct remove_cv;
|
||||||
|
template<class T>
|
||||||
|
struct remove_reference;
|
||||||
|
template<class T>
|
||||||
|
struct add_reference;
|
||||||
|
template<class T>
|
||||||
|
struct remove_pointer;
|
||||||
|
template<class T, class U>
|
||||||
|
struct is_same;
|
||||||
#if !defined(_MSC_VER) && !(defined(__GNUC__) && __GNUC__ <= 3)
|
#if !defined(_MSC_VER) && !(defined(__GNUC__) && __GNUC__ <= 3)
|
||||||
template <class From, class To> struct is_convertible;
|
template<class From, class To>
|
||||||
|
struct is_convertible;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// is_integral is false except for the built-in integer types. A
|
// is_integral is false except for the built-in integer types. A
|
||||||
// cv-qualified type is integral if and only if the underlying type is.
|
// cv-qualified type is integral if and only if the underlying type is.
|
||||||
template <class T> struct is_integral : false_type { };
|
template<class T>
|
||||||
template<> struct is_integral<bool> : true_type { };
|
struct is_integral : false_type
|
||||||
template<> struct is_integral<char> : true_type { };
|
{};
|
||||||
template<> struct is_integral<unsigned char> : true_type { };
|
template<>
|
||||||
template<> struct is_integral<signed char> : true_type { };
|
struct is_integral<bool> : true_type
|
||||||
|
{};
|
||||||
|
template<>
|
||||||
|
struct is_integral<char> : true_type
|
||||||
|
{};
|
||||||
|
template<>
|
||||||
|
struct is_integral<unsigned char> : true_type
|
||||||
|
{};
|
||||||
|
template<>
|
||||||
|
struct is_integral<signed char> : true_type
|
||||||
|
{};
|
||||||
#if defined(_MSC_VER)
|
#if defined(_MSC_VER)
|
||||||
// wchar_t is not by default a distinct type from unsigned short in
|
// wchar_t is not by default a distinct type from unsigned short in
|
||||||
// Microsoft C.
|
// Microsoft C.
|
||||||
// See http://msdn2.microsoft.com/en-us/library/dh8che7s(VS.80).aspx
|
// See http://msdn2.microsoft.com/en-us/library/dh8che7s(VS.80).aspx
|
||||||
template<> struct is_integral<__wchar_t> : true_type { };
|
template<>
|
||||||
|
struct is_integral<__wchar_t> : true_type
|
||||||
|
{};
|
||||||
#else
|
#else
|
||||||
template<> struct is_integral<wchar_t> : true_type { };
|
template<>
|
||||||
|
struct is_integral<wchar_t> : true_type
|
||||||
|
{};
|
||||||
#endif
|
#endif
|
||||||
template<> struct is_integral<short> : true_type { };
|
template<>
|
||||||
template<> struct is_integral<unsigned short> : true_type { };
|
struct is_integral<short> : true_type
|
||||||
template<> struct is_integral<int> : true_type { };
|
{};
|
||||||
template<> struct is_integral<unsigned int> : true_type { };
|
template<>
|
||||||
template<> struct is_integral<long> : true_type { };
|
struct is_integral<unsigned short> : true_type
|
||||||
template<> struct is_integral<unsigned long> : true_type { };
|
{};
|
||||||
|
template<>
|
||||||
|
struct is_integral<int> : true_type
|
||||||
|
{};
|
||||||
|
template<>
|
||||||
|
struct is_integral<unsigned int> : true_type
|
||||||
|
{};
|
||||||
|
template<>
|
||||||
|
struct is_integral<long> : true_type
|
||||||
|
{};
|
||||||
|
template<>
|
||||||
|
struct is_integral<unsigned long> : true_type
|
||||||
|
{};
|
||||||
#ifdef HAVE_LONG_LONG
|
#ifdef HAVE_LONG_LONG
|
||||||
template<> struct is_integral<long long> : true_type { };
|
template<>
|
||||||
template<> struct is_integral<unsigned long long> : true_type { };
|
struct is_integral<long long> : true_type
|
||||||
|
{};
|
||||||
|
template<>
|
||||||
|
struct is_integral<unsigned long long> : true_type
|
||||||
|
{};
|
||||||
#endif
|
#endif
|
||||||
template <class T> struct is_integral<const T> : is_integral<T> { };
|
template<class T>
|
||||||
template <class T> struct is_integral<volatile T> : is_integral<T> { };
|
struct is_integral<const T> : is_integral<T>
|
||||||
template <class T> struct is_integral<const volatile T> : is_integral<T> { };
|
{};
|
||||||
|
template<class T>
|
||||||
|
struct is_integral<volatile T> : is_integral<T>
|
||||||
|
{};
|
||||||
|
template<class T>
|
||||||
|
struct is_integral<const volatile T> : is_integral<T>
|
||||||
|
{};
|
||||||
|
|
||||||
// is_floating_point is false except for the built-in floating-point types.
|
// is_floating_point is false except for the built-in floating-point types.
|
||||||
// A cv-qualified type is integral if and only if the underlying type is.
|
// A cv-qualified type is integral if and only if the underlying type is.
|
||||||
template <class T> struct is_floating_point : false_type { };
|
template<class T>
|
||||||
template<> struct is_floating_point<float> : true_type { };
|
struct is_floating_point : false_type
|
||||||
template<> struct is_floating_point<double> : true_type { };
|
{};
|
||||||
template<> struct is_floating_point<long double> : true_type { };
|
template<>
|
||||||
template <class T> struct is_floating_point<const T>
|
struct is_floating_point<float> : true_type
|
||||||
: is_floating_point<T> { };
|
{};
|
||||||
template <class T> struct is_floating_point<volatile T>
|
template<>
|
||||||
: is_floating_point<T> { };
|
struct is_floating_point<double> : true_type
|
||||||
template <class T> struct is_floating_point<const volatile T>
|
{};
|
||||||
: is_floating_point<T> { };
|
template<>
|
||||||
|
struct is_floating_point<long double> : true_type
|
||||||
|
{};
|
||||||
|
template<class T>
|
||||||
|
struct is_floating_point<const T> : is_floating_point<T>
|
||||||
|
{};
|
||||||
|
template<class T>
|
||||||
|
struct is_floating_point<volatile T> : is_floating_point<T>
|
||||||
|
{};
|
||||||
|
template<class T>
|
||||||
|
struct is_floating_point<const volatile T> : is_floating_point<T>
|
||||||
|
{};
|
||||||
|
|
||||||
// is_pointer is false except for pointer types. A cv-qualified type (e.g.
|
// is_pointer is false except for pointer types. A cv-qualified type (e.g.
|
||||||
// "int* const", as opposed to "int const*") is cv-qualified if and only if
|
// "int* const", as opposed to "int const*") is cv-qualified if and only if
|
||||||
// the underlying type is.
|
// the underlying type is.
|
||||||
template <class T> struct is_pointer : false_type { };
|
template<class T>
|
||||||
template <class T> struct is_pointer<T*> : true_type { };
|
struct is_pointer : false_type
|
||||||
template <class T> struct is_pointer<const T> : is_pointer<T> { };
|
{};
|
||||||
template <class T> struct is_pointer<volatile T> : is_pointer<T> { };
|
template<class T>
|
||||||
template <class T> struct is_pointer<const volatile T> : is_pointer<T> { };
|
struct is_pointer<T*> : true_type
|
||||||
|
{};
|
||||||
|
template<class T>
|
||||||
|
struct is_pointer<const T> : is_pointer<T>
|
||||||
|
{};
|
||||||
|
template<class T>
|
||||||
|
struct is_pointer<volatile T> : is_pointer<T>
|
||||||
|
{};
|
||||||
|
template<class T>
|
||||||
|
struct is_pointer<const volatile T> : is_pointer<T>
|
||||||
|
{};
|
||||||
|
|
||||||
#if !defined(_MSC_VER) && !(defined(__GNUC__) && __GNUC__ <= 3)
|
#if !defined(_MSC_VER) && !(defined(__GNUC__) && __GNUC__ <= 3)
|
||||||
|
|
||||||
namespace internal {
|
namespace internal {
|
||||||
|
|
||||||
template <class T> struct is_class_or_union {
|
template<class T>
|
||||||
template <class U> static small_ tester(void (U::*)());
|
struct is_class_or_union
|
||||||
template <class U> static big_ tester(...);
|
{
|
||||||
|
template<class U>
|
||||||
|
static small_ tester(void (U::*)());
|
||||||
|
template<class U>
|
||||||
|
static big_ tester(...);
|
||||||
static const bool value = sizeof(tester<T>(0)) == sizeof(small_);
|
static const bool value = sizeof(tester<T>(0)) == sizeof(small_);
|
||||||
};
|
};
|
||||||
|
|
||||||
// is_convertible chokes if the first argument is an array. That's why
|
// is_convertible chokes if the first argument is an array. That's why
|
||||||
// we use add_reference here.
|
// we use add_reference here.
|
||||||
template <bool NotUnum, class T> struct is_enum_impl
|
template<bool NotUnum, class T>
|
||||||
: is_convertible<typename add_reference<T>::type, int> { };
|
struct is_enum_impl : is_convertible<typename add_reference<T>::type, int>
|
||||||
|
{};
|
||||||
|
|
||||||
template <class T> struct is_enum_impl<true, T> : false_type { };
|
template<class T>
|
||||||
|
struct is_enum_impl<true, T> : false_type
|
||||||
|
{};
|
||||||
|
|
||||||
} // namespace internal
|
} // namespace internal
|
||||||
|
|
||||||
|
@ -174,127 +256,212 @@ template <class T> struct is_enum_impl<true, T> : false_type { };
|
||||||
// Is-convertible-to-int check is done only if all other checks pass,
|
// Is-convertible-to-int check is done only if all other checks pass,
|
||||||
// because it can't be used with some types (e.g. void or classes with
|
// because it can't be used with some types (e.g. void or classes with
|
||||||
// inaccessible conversion operators).
|
// inaccessible conversion operators).
|
||||||
template <class T> struct is_enum
|
template<class T>
|
||||||
: internal::is_enum_impl<
|
struct is_enum
|
||||||
is_same<T, void>::value ||
|
: internal::is_enum_impl<is_same<T, void>::value || is_integral<T>::value || is_floating_point<T>::value ||
|
||||||
is_integral<T>::value ||
|
is_reference<T>::value || internal::is_class_or_union<T>::value,
|
||||||
is_floating_point<T>::value ||
|
T>
|
||||||
is_reference<T>::value ||
|
{};
|
||||||
internal::is_class_or_union<T>::value,
|
|
||||||
T> { };
|
|
||||||
|
|
||||||
template <class T> struct is_enum<const T> : is_enum<T> { };
|
template<class T>
|
||||||
template <class T> struct is_enum<volatile T> : is_enum<T> { };
|
struct is_enum<const T> : is_enum<T>
|
||||||
template <class T> struct is_enum<const volatile T> : is_enum<T> { };
|
{};
|
||||||
|
template<class T>
|
||||||
|
struct is_enum<volatile T> : is_enum<T>
|
||||||
|
{};
|
||||||
|
template<class T>
|
||||||
|
struct is_enum<const volatile T> : is_enum<T>
|
||||||
|
{};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// is_reference is false except for reference types.
|
// is_reference is false except for reference types.
|
||||||
template<typename T> struct is_reference : false_type {};
|
template<typename T>
|
||||||
template<typename T> struct is_reference<T&> : true_type {};
|
struct is_reference : false_type
|
||||||
|
{};
|
||||||
|
template<typename T>
|
||||||
|
struct is_reference<T&> : true_type
|
||||||
|
{};
|
||||||
|
|
||||||
// We can't get is_pod right without compiler help, so fail conservatively.
|
// We can't get is_pod right without compiler help, so fail conservatively.
|
||||||
// We will assume it's false except for arithmetic types, enumerations,
|
// We will assume it's false except for arithmetic types, enumerations,
|
||||||
// pointers and cv-qualified versions thereof. Note that std::pair<T,U>
|
// pointers and cv-qualified versions thereof. Note that std::pair<T,U>
|
||||||
// is not a POD even if T and U are PODs.
|
// is not a POD even if T and U are PODs.
|
||||||
template <class T> struct is_pod
|
template<class T>
|
||||||
: integral_constant<bool, (is_integral<T>::value ||
|
struct is_pod : integral_constant<bool,
|
||||||
is_floating_point<T>::value ||
|
(is_integral<T>::value || is_floating_point<T>::value ||
|
||||||
#if !defined(_MSC_VER) && !(defined(__GNUC__) && __GNUC__ <= 3)
|
#if !defined(_MSC_VER) && !(defined(__GNUC__) && __GNUC__ <= 3)
|
||||||
// is_enum is not available on MSVC.
|
// is_enum is not available on MSVC.
|
||||||
is_enum<T>::value ||
|
is_enum<T>::value ||
|
||||||
#endif
|
#endif
|
||||||
is_pointer<T>::value)> { };
|
is_pointer<T>::value)>
|
||||||
template <class T> struct is_pod<const T> : is_pod<T> { };
|
{};
|
||||||
template <class T> struct is_pod<volatile T> : is_pod<T> { };
|
template<class T>
|
||||||
template <class T> struct is_pod<const volatile T> : is_pod<T> { };
|
struct is_pod<const T> : is_pod<T>
|
||||||
|
{};
|
||||||
|
template<class T>
|
||||||
|
struct is_pod<volatile T> : is_pod<T>
|
||||||
|
{};
|
||||||
|
template<class T>
|
||||||
|
struct is_pod<const volatile T> : is_pod<T>
|
||||||
|
{};
|
||||||
|
|
||||||
// We can't get has_trivial_constructor right without compiler help, so
|
// We can't get has_trivial_constructor right without compiler help, so
|
||||||
// fail conservatively. We will assume it's false except for: (1) types
|
// fail conservatively. We will assume it's false except for: (1) types
|
||||||
// for which is_pod is true. (2) std::pair of types with trivial
|
// for which is_pod is true. (2) std::pair of types with trivial
|
||||||
// constructors. (3) array of a type with a trivial constructor.
|
// constructors. (3) array of a type with a trivial constructor.
|
||||||
// (4) const versions thereof.
|
// (4) const versions thereof.
|
||||||
template <class T> struct has_trivial_constructor : is_pod<T> { };
|
template<class T>
|
||||||
template <class T, class U> struct has_trivial_constructor<std::pair<T, U> >
|
struct has_trivial_constructor : is_pod<T>
|
||||||
: integral_constant<bool,
|
{};
|
||||||
(has_trivial_constructor<T>::value &&
|
template<class T, class U>
|
||||||
has_trivial_constructor<U>::value)> { };
|
struct has_trivial_constructor<std::pair<T, U>>
|
||||||
template <class A, int N> struct has_trivial_constructor<A[N]>
|
: integral_constant<bool, (has_trivial_constructor<T>::value && has_trivial_constructor<U>::value)>
|
||||||
: has_trivial_constructor<A> { };
|
{};
|
||||||
template <class T> struct has_trivial_constructor<const T>
|
template<class A, int N>
|
||||||
: has_trivial_constructor<T> { };
|
struct has_trivial_constructor<A[N]> : has_trivial_constructor<A>
|
||||||
|
{};
|
||||||
|
template<class T>
|
||||||
|
struct has_trivial_constructor<const T> : has_trivial_constructor<T>
|
||||||
|
{};
|
||||||
|
|
||||||
// We can't get has_trivial_copy right without compiler help, so fail
|
// We can't get has_trivial_copy right without compiler help, so fail
|
||||||
// conservatively. We will assume it's false except for: (1) types
|
// conservatively. We will assume it's false except for: (1) types
|
||||||
// for which is_pod is true. (2) std::pair of types with trivial copy
|
// for which is_pod is true. (2) std::pair of types with trivial copy
|
||||||
// constructors. (3) array of a type with a trivial copy constructor.
|
// constructors. (3) array of a type with a trivial copy constructor.
|
||||||
// (4) const versions thereof.
|
// (4) const versions thereof.
|
||||||
template <class T> struct has_trivial_copy : is_pod<T> { };
|
template<class T>
|
||||||
template <class T, class U> struct has_trivial_copy<std::pair<T, U> >
|
struct has_trivial_copy : is_pod<T>
|
||||||
: integral_constant<bool,
|
{};
|
||||||
(has_trivial_copy<T>::value &&
|
template<class T, class U>
|
||||||
has_trivial_copy<U>::value)> { };
|
struct has_trivial_copy<std::pair<T, U>>
|
||||||
template <class A, int N> struct has_trivial_copy<A[N]>
|
: integral_constant<bool, (has_trivial_copy<T>::value && has_trivial_copy<U>::value)>
|
||||||
: has_trivial_copy<A> { };
|
{};
|
||||||
template <class T> struct has_trivial_copy<const T> : has_trivial_copy<T> { };
|
template<class A, int N>
|
||||||
|
struct has_trivial_copy<A[N]> : has_trivial_copy<A>
|
||||||
|
{};
|
||||||
|
template<class T>
|
||||||
|
struct has_trivial_copy<const T> : has_trivial_copy<T>
|
||||||
|
{};
|
||||||
|
|
||||||
// We can't get has_trivial_assign right without compiler help, so fail
|
// We can't get has_trivial_assign right without compiler help, so fail
|
||||||
// conservatively. We will assume it's false except for: (1) types
|
// conservatively. We will assume it's false except for: (1) types
|
||||||
// for which is_pod is true. (2) std::pair of types with trivial copy
|
// for which is_pod is true. (2) std::pair of types with trivial copy
|
||||||
// constructors. (3) array of a type with a trivial assign constructor.
|
// constructors. (3) array of a type with a trivial assign constructor.
|
||||||
template <class T> struct has_trivial_assign : is_pod<T> { };
|
template<class T>
|
||||||
template <class T, class U> struct has_trivial_assign<std::pair<T, U> >
|
struct has_trivial_assign : is_pod<T>
|
||||||
: integral_constant<bool,
|
{};
|
||||||
(has_trivial_assign<T>::value &&
|
template<class T, class U>
|
||||||
has_trivial_assign<U>::value)> { };
|
struct has_trivial_assign<std::pair<T, U>>
|
||||||
template <class A, int N> struct has_trivial_assign<A[N]>
|
: integral_constant<bool, (has_trivial_assign<T>::value && has_trivial_assign<U>::value)>
|
||||||
: has_trivial_assign<A> { };
|
{};
|
||||||
|
template<class A, int N>
|
||||||
|
struct has_trivial_assign<A[N]> : has_trivial_assign<A>
|
||||||
|
{};
|
||||||
|
|
||||||
// We can't get has_trivial_destructor right without compiler help, so
|
// We can't get has_trivial_destructor right without compiler help, so
|
||||||
// fail conservatively. We will assume it's false except for: (1) types
|
// fail conservatively. We will assume it's false except for: (1) types
|
||||||
// for which is_pod is true. (2) std::pair of types with trivial
|
// for which is_pod is true. (2) std::pair of types with trivial
|
||||||
// destructors. (3) array of a type with a trivial destructor.
|
// destructors. (3) array of a type with a trivial destructor.
|
||||||
// (4) const versions thereof.
|
// (4) const versions thereof.
|
||||||
template <class T> struct has_trivial_destructor : is_pod<T> { };
|
template<class T>
|
||||||
template <class T, class U> struct has_trivial_destructor<std::pair<T, U> >
|
struct has_trivial_destructor : is_pod<T>
|
||||||
: integral_constant<bool,
|
{};
|
||||||
(has_trivial_destructor<T>::value &&
|
template<class T, class U>
|
||||||
has_trivial_destructor<U>::value)> { };
|
struct has_trivial_destructor<std::pair<T, U>>
|
||||||
template <class A, int N> struct has_trivial_destructor<A[N]>
|
: integral_constant<bool, (has_trivial_destructor<T>::value && has_trivial_destructor<U>::value)>
|
||||||
: has_trivial_destructor<A> { };
|
{};
|
||||||
template <class T> struct has_trivial_destructor<const T>
|
template<class A, int N>
|
||||||
: has_trivial_destructor<T> { };
|
struct has_trivial_destructor<A[N]> : has_trivial_destructor<A>
|
||||||
|
{};
|
||||||
|
template<class T>
|
||||||
|
struct has_trivial_destructor<const T> : has_trivial_destructor<T>
|
||||||
|
{};
|
||||||
|
|
||||||
// Specified by TR1 [4.7.1]
|
// Specified by TR1 [4.7.1]
|
||||||
template<typename T> struct remove_const { typedef T type; };
|
template<typename T>
|
||||||
template<typename T> struct remove_const<T const> { typedef T type; };
|
struct remove_const
|
||||||
template<typename T> struct remove_volatile { typedef T type; };
|
{
|
||||||
template<typename T> struct remove_volatile<T volatile> { typedef T type; };
|
typedef T type;
|
||||||
template<typename T> struct remove_cv {
|
};
|
||||||
|
template<typename T>
|
||||||
|
struct remove_const<T const>
|
||||||
|
{
|
||||||
|
typedef T type;
|
||||||
|
};
|
||||||
|
template<typename T>
|
||||||
|
struct remove_volatile
|
||||||
|
{
|
||||||
|
typedef T type;
|
||||||
|
};
|
||||||
|
template<typename T>
|
||||||
|
struct remove_volatile<T volatile>
|
||||||
|
{
|
||||||
|
typedef T type;
|
||||||
|
};
|
||||||
|
template<typename T>
|
||||||
|
struct remove_cv
|
||||||
|
{
|
||||||
typedef typename remove_const<typename remove_volatile<T>::type>::type type;
|
typedef typename remove_const<typename remove_volatile<T>::type>::type type;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
// Specified by TR1 [4.7.2] Reference modifications.
|
// Specified by TR1 [4.7.2] Reference modifications.
|
||||||
template<typename T> struct remove_reference { typedef T type; };
|
template<typename T>
|
||||||
template<typename T> struct remove_reference<T&> { typedef T type; };
|
struct remove_reference
|
||||||
|
{
|
||||||
|
typedef T type;
|
||||||
|
};
|
||||||
|
template<typename T>
|
||||||
|
struct remove_reference<T&>
|
||||||
|
{
|
||||||
|
typedef T type;
|
||||||
|
};
|
||||||
|
|
||||||
template <typename T> struct add_reference { typedef T& type; };
|
template<typename T>
|
||||||
template <typename T> struct add_reference<T&> { typedef T& type; };
|
struct add_reference
|
||||||
|
{
|
||||||
|
typedef T& type;
|
||||||
|
};
|
||||||
|
template<typename T>
|
||||||
|
struct add_reference<T&>
|
||||||
|
{
|
||||||
|
typedef T& type;
|
||||||
|
};
|
||||||
|
|
||||||
// Specified by TR1 [4.7.4] Pointer modifications.
|
// Specified by TR1 [4.7.4] Pointer modifications.
|
||||||
template<typename T> struct remove_pointer { typedef T type; };
|
template<typename T>
|
||||||
template<typename T> struct remove_pointer<T*> { typedef T type; };
|
struct remove_pointer
|
||||||
template<typename T> struct remove_pointer<T* const> { typedef T type; };
|
{
|
||||||
template<typename T> struct remove_pointer<T* volatile> { typedef T type; };
|
typedef T type;
|
||||||
template<typename T> struct remove_pointer<T* const volatile> {
|
};
|
||||||
typedef T type; };
|
template<typename T>
|
||||||
|
struct remove_pointer<T*>
|
||||||
|
{
|
||||||
|
typedef T type;
|
||||||
|
};
|
||||||
|
template<typename T>
|
||||||
|
struct remove_pointer<T* const>
|
||||||
|
{
|
||||||
|
typedef T type;
|
||||||
|
};
|
||||||
|
template<typename T>
|
||||||
|
struct remove_pointer<T* volatile>
|
||||||
|
{
|
||||||
|
typedef T type;
|
||||||
|
};
|
||||||
|
template<typename T>
|
||||||
|
struct remove_pointer<T* const volatile>
|
||||||
|
{
|
||||||
|
typedef T type;
|
||||||
|
};
|
||||||
|
|
||||||
// Specified by TR1 [4.6] Relationships between types
|
// Specified by TR1 [4.6] Relationships between types
|
||||||
template<typename T, typename U> struct is_same : public false_type { };
|
template<typename T, typename U>
|
||||||
template<typename T> struct is_same<T, T> : public true_type { };
|
struct is_same : public false_type
|
||||||
|
{};
|
||||||
|
template<typename T>
|
||||||
|
struct is_same<T, T> : public true_type
|
||||||
|
{};
|
||||||
|
|
||||||
// Specified by TR1 [4.6] Relationships between types
|
// Specified by TR1 [4.6] Relationships between types
|
||||||
#if !defined(_MSC_VER) && !(defined(__GNUC__) && __GNUC__ <= 3)
|
#if !defined(_MSC_VER) && !(defined(__GNUC__) && __GNUC__ <= 3)
|
||||||
|
@ -310,7 +477,8 @@ namespace internal {
|
||||||
// _Modern C++ Design_ for more details on this sort of trick.
|
// _Modern C++ Design_ for more details on this sort of trick.
|
||||||
|
|
||||||
template<typename From, typename To>
|
template<typename From, typename To>
|
||||||
struct ConvertHelper {
|
struct ConvertHelper
|
||||||
|
{
|
||||||
static small_ Test(To);
|
static small_ Test(To);
|
||||||
static big_ Test(...);
|
static big_ Test(...);
|
||||||
static From Create();
|
static From Create();
|
||||||
|
@ -321,10 +489,9 @@ struct ConvertHelper {
|
||||||
template<typename From, typename To>
|
template<typename From, typename To>
|
||||||
struct is_convertible
|
struct is_convertible
|
||||||
: integral_constant<bool,
|
: integral_constant<bool,
|
||||||
sizeof(internal::ConvertHelper<From, To>::Test(
|
sizeof(internal::ConvertHelper<From, To>::Test(internal::ConvertHelper<From, To>::Create())) ==
|
||||||
internal::ConvertHelper<From, To>::Create()))
|
sizeof(small_)>
|
||||||
== sizeof(small_)> {
|
{};
|
||||||
};
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
_END_GOOGLE_NAMESPACE_
|
_END_GOOGLE_NAMESPACE_
|
||||||
|
|
|
@ -118,9 +118,18 @@ using datasource_ptr = std::shared_ptr<datasource>;
|
||||||
#define DATASOURCE_PLUGIN(classname)
|
#define DATASOURCE_PLUGIN(classname)
|
||||||
#else
|
#else
|
||||||
#define DATASOURCE_PLUGIN(classname) \
|
#define DATASOURCE_PLUGIN(classname) \
|
||||||
extern "C" MAPNIK_EXP const char* datasource_name() { return classname::name(); } \
|
extern "C" MAPNIK_EXP const char* datasource_name() \
|
||||||
extern "C" MAPNIK_EXP datasource* create(parameters const& params) { return new classname(params); } \
|
{ \
|
||||||
extern "C" MAPNIK_EXP void destroy(datasource* ds) { delete ds; }
|
return classname::name(); \
|
||||||
|
} \
|
||||||
|
extern "C" MAPNIK_EXP datasource* create(parameters const& params) \
|
||||||
|
{ \
|
||||||
|
return new classname(params); \
|
||||||
|
} \
|
||||||
|
extern "C" MAPNIK_EXP void destroy(datasource* ds) \
|
||||||
|
{ \
|
||||||
|
delete ds; \
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
} // namespace mapnik
|
} // namespace mapnik
|
||||||
|
|
|
@ -96,7 +96,10 @@ class MAPNIK_DECL logger : public singleton<logger, CreateStatic>,
|
||||||
}
|
}
|
||||||
|
|
||||||
// format
|
// format
|
||||||
static std::string const& get_format() { return format_; }
|
static std::string const& get_format()
|
||||||
|
{
|
||||||
|
return format_;
|
||||||
|
}
|
||||||
|
|
||||||
static void set_format(std::string const& format)
|
static void set_format(std::string const& format)
|
||||||
{
|
{
|
||||||
|
@ -208,7 +211,10 @@ class base_log : public util::noncopyable
|
||||||
|
|
||||||
private:
|
private:
|
||||||
#ifdef MAPNIK_LOG
|
#ifdef MAPNIK_LOG
|
||||||
inline bool check_severity() { return Severity >= logger::get_object_severity(object_name_); }
|
inline bool check_severity()
|
||||||
|
{
|
||||||
|
return Severity >= logger::get_object_severity(object_name_);
|
||||||
|
}
|
||||||
|
|
||||||
typename output_policy::stream_buffer streambuf_;
|
typename output_policy::stream_buffer streambuf_;
|
||||||
std::string object_name_;
|
std::string object_name_;
|
||||||
|
|
|
@ -152,7 +152,10 @@ class hextree : private util::noncopyable
|
||||||
|
|
||||||
~hextree() {}
|
~hextree() {}
|
||||||
|
|
||||||
void setMaxColors(unsigned max_colors) { max_colors_ = max_colors; }
|
void setMaxColors(unsigned max_colors)
|
||||||
|
{
|
||||||
|
max_colors_ = max_colors;
|
||||||
|
}
|
||||||
|
|
||||||
void setGamma(double g)
|
void setGamma(double g)
|
||||||
{
|
{
|
||||||
|
@ -163,9 +166,15 @@ class hextree : private util::noncopyable
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void setTransMode(unsigned t) { trans_mode_ = t; }
|
void setTransMode(unsigned t)
|
||||||
|
{
|
||||||
|
trans_mode_ = t;
|
||||||
|
}
|
||||||
|
|
||||||
transparency_mode_t getTransMode() const { return trans_mode_; }
|
transparency_mode_t getTransMode() const
|
||||||
|
{
|
||||||
|
return trans_mode_;
|
||||||
|
}
|
||||||
|
|
||||||
// process alpha value based on trans_mode_
|
// process alpha value based on trans_mode_
|
||||||
std::uint8_t preprocessAlpha(std::uint8_t a) const
|
std::uint8_t preprocessAlpha(std::uint8_t a) const
|
||||||
|
|
|
@ -640,7 +640,10 @@ struct offset_converter
|
||||||
return cur_.cmd;
|
return cur_.cmd;
|
||||||
}
|
}
|
||||||
|
|
||||||
void push_vertex(vertex2d const& v) { vertices_.push_back(v); }
|
void push_vertex(vertex2d const& v)
|
||||||
|
{
|
||||||
|
vertices_.push_back(v);
|
||||||
|
}
|
||||||
|
|
||||||
Geometry& geom_;
|
Geometry& geom_;
|
||||||
double offset_;
|
double offset_;
|
||||||
|
|
|
@ -492,8 +492,14 @@ class renderer_agg : util::noncopyable
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
inline VertexSource& source() const { return source_; }
|
inline VertexSource& source() const
|
||||||
inline AttributeSource const& attributes() const { return attributes_; }
|
{
|
||||||
|
return source_;
|
||||||
|
}
|
||||||
|
inline AttributeSource const& attributes() const
|
||||||
|
{
|
||||||
|
return attributes_;
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
|
|
@ -60,13 +60,25 @@ class file : public util::noncopyable
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
inline bool is_open() const { return file_ ? true : false; }
|
inline bool is_open() const
|
||||||
|
{
|
||||||
|
return file_ ? true : false;
|
||||||
|
}
|
||||||
|
|
||||||
explicit operator bool() const { return this->is_open(); }
|
explicit operator bool() const
|
||||||
|
{
|
||||||
|
return this->is_open();
|
||||||
|
}
|
||||||
|
|
||||||
inline std::FILE* get() const { return file_.get(); }
|
inline std::FILE* get() const
|
||||||
|
{
|
||||||
|
return file_.get();
|
||||||
|
}
|
||||||
|
|
||||||
inline std::size_t size() const { return size_; }
|
inline std::size_t size() const
|
||||||
|
{
|
||||||
|
return size_;
|
||||||
|
}
|
||||||
|
|
||||||
inline data_type data() const
|
inline data_type data() const
|
||||||
{
|
{
|
||||||
|
|
|
@ -77,7 +77,10 @@ class singleton
|
||||||
singleton(const singleton& rhs);
|
singleton(const singleton& rhs);
|
||||||
singleton& operator=(const singleton&);
|
singleton& operator=(const singleton&);
|
||||||
|
|
||||||
static void onDeadReference() { throw std::runtime_error("dead reference!"); }
|
static void onDeadReference()
|
||||||
|
{
|
||||||
|
throw std::runtime_error("dead reference!");
|
||||||
|
}
|
||||||
|
|
||||||
static void DestroySingleton()
|
static void DestroySingleton()
|
||||||
{
|
{
|
||||||
|
|
|
@ -144,11 +144,20 @@ class ogr_layer_ptr
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string const& layer_name() const { return layer_name_; }
|
std::string const& layer_name() const
|
||||||
|
{
|
||||||
|
return layer_name_;
|
||||||
|
}
|
||||||
|
|
||||||
OGRLayer* layer() const { return layer_; }
|
OGRLayer* layer() const
|
||||||
|
{
|
||||||
|
return layer_;
|
||||||
|
}
|
||||||
|
|
||||||
bool is_valid() const { return is_valid_; }
|
bool is_valid() const
|
||||||
|
{
|
||||||
|
return is_valid_;
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
|
|
@ -236,11 +236,20 @@ class Connection
|
||||||
return std::make_shared<ResultSet>(result);
|
return std::make_shared<ResultSet>(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string client_encoding() const { return PQparameterStatus(conn_, "client_encoding"); }
|
std::string client_encoding() const
|
||||||
|
{
|
||||||
|
return PQparameterStatus(conn_, "client_encoding");
|
||||||
|
}
|
||||||
|
|
||||||
bool isOK() const { return (!closed_) && (PQstatus(conn_) != CONNECTION_BAD); }
|
bool isOK() const
|
||||||
|
{
|
||||||
|
return (!closed_) && (PQstatus(conn_) != CONNECTION_BAD);
|
||||||
|
}
|
||||||
|
|
||||||
bool isPending() const { return pending_; }
|
bool isPending() const
|
||||||
|
{
|
||||||
|
return pending_;
|
||||||
|
}
|
||||||
|
|
||||||
void close()
|
void close()
|
||||||
{
|
{
|
||||||
|
|
|
@ -171,15 +171,30 @@ class shape_file : public mapnik::util::mapped_memory_file
|
||||||
file_.read(reinterpret_cast<char*>(&envelope), sizeof(envelope));
|
file_.read(reinterpret_cast<char*>(&envelope), sizeof(envelope));
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void rewind() { seek(100); }
|
inline void rewind()
|
||||||
|
{
|
||||||
|
seek(100);
|
||||||
|
}
|
||||||
|
|
||||||
inline void seek(std::streampos pos) { file_.seekg(pos, std::ios::beg); }
|
inline void seek(std::streampos pos)
|
||||||
|
{
|
||||||
|
file_.seekg(pos, std::ios::beg);
|
||||||
|
}
|
||||||
|
|
||||||
inline std::streampos pos() { return file_.tellg(); }
|
inline std::streampos pos()
|
||||||
|
{
|
||||||
|
return file_.tellg();
|
||||||
|
}
|
||||||
|
|
||||||
inline bool is_eof() { return file_.eof(); }
|
inline bool is_eof()
|
||||||
|
{
|
||||||
|
return file_.eof();
|
||||||
|
}
|
||||||
|
|
||||||
inline bool is_good() { return file_.good(); }
|
inline bool is_good()
|
||||||
|
{
|
||||||
|
return file_.good();
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // SHAPEFILE_HPP
|
#endif // SHAPEFILE_HPP
|
||||||
|
|
|
@ -160,7 +160,10 @@ class sqlite_connection
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
sqlite3* operator*() { return db_; }
|
sqlite3* operator*()
|
||||||
|
{
|
||||||
|
return db_;
|
||||||
|
}
|
||||||
|
|
||||||
bool load_extension(std::string const& ext_path)
|
bool load_extension(std::string const& ext_path)
|
||||||
{
|
{
|
||||||
|
|
|
@ -128,7 +128,8 @@ proj_transform::proj_transform(projection const& source, projection const& dest)
|
||||||
transform_ = proj_create_crs_to_crs(ctx_, source.params().c_str(), dest.params().c_str(), nullptr);
|
transform_ = proj_create_crs_to_crs(ctx_, source.params().c_str(), dest.params().c_str(), nullptr);
|
||||||
if (transform_ == nullptr)
|
if (transform_ == nullptr)
|
||||||
{
|
{
|
||||||
throw std::runtime_error(std::string("Cannot initialize proj_transform (crs_to_crs) for given projections: '") +
|
throw std::runtime_error(
|
||||||
|
std::string("Cannot initialize proj_transform (crs_to_crs) for given projections: '") +
|
||||||
source.params() + "'->'" + dest.params() +
|
source.params() + "'->'" + dest.params() +
|
||||||
#if MAPNIK_PROJ_VERSION >= 80000
|
#if MAPNIK_PROJ_VERSION >= 80000
|
||||||
"' because of " + std::string(proj_context_errno_string(ctx_, proj_context_errno(ctx_))));
|
"' because of " + std::string(proj_context_errno_string(ctx_, proj_context_errno(ctx_))));
|
||||||
|
@ -139,7 +140,8 @@ proj_transform::proj_transform(projection const& source, projection const& dest)
|
||||||
PJ* transform_gis = proj_normalize_for_visualization(ctx_, transform_);
|
PJ* transform_gis = proj_normalize_for_visualization(ctx_, transform_);
|
||||||
if (transform_gis == nullptr)
|
if (transform_gis == nullptr)
|
||||||
{
|
{
|
||||||
throw std::runtime_error(std::string("Cannot initialize proj_transform (normalize) for given projections: '") +
|
throw std::runtime_error(
|
||||||
|
std::string("Cannot initialize proj_transform (normalize) for given projections: '") +
|
||||||
source.params() + "'->'" + dest.params() +
|
source.params() + "'->'" + dest.params() +
|
||||||
#if MAPNIK_PROJ_VERSION >= 80000
|
#if MAPNIK_PROJ_VERSION >= 80000
|
||||||
"' because of " + std::string(proj_context_errno_string(ctx_, proj_context_errno(ctx_))));
|
"' because of " + std::string(proj_context_errno_string(ctx_, proj_context_errno(ctx_))));
|
||||||
|
|
|
@ -96,19 +96,49 @@ class tiff_reader : public image_reader
|
||||||
unsigned width() const final;
|
unsigned width() const final;
|
||||||
unsigned height() const final;
|
unsigned height() const final;
|
||||||
boost::optional<box2d<double>> bounding_box() const final;
|
boost::optional<box2d<double>> bounding_box() const final;
|
||||||
inline bool has_alpha() const final { return has_alpha_; }
|
inline bool has_alpha() const final
|
||||||
|
{
|
||||||
|
return has_alpha_;
|
||||||
|
}
|
||||||
void read(unsigned x, unsigned y, image_rgba8& image) final;
|
void read(unsigned x, unsigned y, image_rgba8& image) final;
|
||||||
image_any read(unsigned x, unsigned y, unsigned width, unsigned height) final;
|
image_any read(unsigned x, unsigned y, unsigned width, unsigned height) final;
|
||||||
// methods specific to tiff reader
|
// methods specific to tiff reader
|
||||||
unsigned bits_per_sample() const { return bps_; }
|
unsigned bits_per_sample() const
|
||||||
unsigned sample_format() const { return sample_format_; }
|
{
|
||||||
unsigned photometric() const { return photometric_; }
|
return bps_;
|
||||||
bool is_tiled() const { return is_tiled_; }
|
}
|
||||||
unsigned tile_width() const { return tile_width_; }
|
unsigned sample_format() const
|
||||||
unsigned tile_height() const { return tile_height_; }
|
{
|
||||||
unsigned rows_per_strip() const { return rows_per_strip_; }
|
return sample_format_;
|
||||||
unsigned planar_config() const { return planar_config_; }
|
}
|
||||||
unsigned compression() const { return compression_; }
|
unsigned photometric() const
|
||||||
|
{
|
||||||
|
return photometric_;
|
||||||
|
}
|
||||||
|
bool is_tiled() const
|
||||||
|
{
|
||||||
|
return is_tiled_;
|
||||||
|
}
|
||||||
|
unsigned tile_width() const
|
||||||
|
{
|
||||||
|
return tile_width_;
|
||||||
|
}
|
||||||
|
unsigned tile_height() const
|
||||||
|
{
|
||||||
|
return tile_height_;
|
||||||
|
}
|
||||||
|
unsigned rows_per_strip() const
|
||||||
|
{
|
||||||
|
return rows_per_strip_;
|
||||||
|
}
|
||||||
|
unsigned planar_config() const
|
||||||
|
{
|
||||||
|
return planar_config_;
|
||||||
|
}
|
||||||
|
unsigned compression() const
|
||||||
|
{
|
||||||
|
return compression_;
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
tiff_reader(const tiff_reader&);
|
tiff_reader(const tiff_reader&);
|
||||||
|
|
9758
test/catch.hpp
9758
test/catch.hpp
File diff suppressed because it is too large
Load diff
|
@ -4,19 +4,20 @@
|
||||||
#include "catch.hpp"
|
#include "catch.hpp"
|
||||||
|
|
||||||
#define TRY_CHECK(expr) \
|
#define TRY_CHECK(expr) \
|
||||||
try { \
|
try \
|
||||||
|
{ \
|
||||||
CHECK(expr); \
|
CHECK(expr); \
|
||||||
} \
|
} catch (Catch::TestFailureException&) \
|
||||||
catch ( Catch::TestFailureException & ) { \
|
{ \
|
||||||
/* thrown by CHECK after it catches and reports */ \
|
/* thrown by CHECK after it catches and reports */ \
|
||||||
/* an exception from expr => swallow this */ \
|
/* an exception from expr => swallow this */ \
|
||||||
}
|
}
|
||||||
|
|
||||||
#define TRY_CHECK_FALSE(expr) \
|
#define TRY_CHECK_FALSE(expr) \
|
||||||
try { \
|
try \
|
||||||
|
{ \
|
||||||
CHECK_FALSE(expr); \
|
CHECK_FALSE(expr); \
|
||||||
} \
|
} catch (Catch::TestFailureException&) \
|
||||||
catch ( Catch::TestFailureException & ) { \
|
{}
|
||||||
}
|
|
||||||
|
|
||||||
#endif // TEST_CATCH_EXT_HPP
|
#endif // TEST_CATCH_EXT_HPP
|
||||||
|
|
|
@ -343,7 +343,10 @@ TEST_CASE("postgis")
|
||||||
REQUIRE(ds != nullptr);
|
REQUIRE(ds != nullptr);
|
||||||
auto featureset = all_features(ds);
|
auto featureset = all_features(ds);
|
||||||
auto feature = featureset->next();
|
auto feature = featureset->next();
|
||||||
CHECKED_IF(feature != nullptr) { CHECK(feature->get("email").to_string() == "fake@mail.ru"); }
|
CHECKED_IF(feature != nullptr)
|
||||||
|
{
|
||||||
|
CHECK(feature->get("email").to_string() == "fake@mail.ru");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SECTION("Postgis interpolates !@uservar! tokens in query")
|
SECTION("Postgis interpolates !@uservar! tokens in query")
|
||||||
|
|
|
@ -381,7 +381,10 @@ TEST_CASE("image class")
|
||||||
// swap empty <-> non-empty
|
// swap empty <-> non-empty
|
||||||
CHECK_NOTHROW(im.swap(im3));
|
CHECK_NOTHROW(im.swap(im3));
|
||||||
CHECK(im3.data() == nullptr);
|
CHECK(im3.data() == nullptr);
|
||||||
CHECKED_IF(im.data() != nullptr) { CHECK(im(0, 0) == blue); }
|
CHECKED_IF(im.data() != nullptr)
|
||||||
|
{
|
||||||
|
CHECK(im(0, 0) == blue);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
} // END TEST CASE
|
} // END TEST CASE
|
||||||
|
|
|
@ -167,9 +167,15 @@ void test_tiff_reader(std::string const& pattern)
|
||||||
|
|
||||||
TEST_CASE("tiff io")
|
TEST_CASE("tiff io")
|
||||||
{
|
{
|
||||||
SECTION("tiff-reader rgb8+rgba8") { test_tiff_reader<mapnik::image_rgba8>("tiff_rgb"); }
|
SECTION("tiff-reader rgb8+rgba8")
|
||||||
|
{
|
||||||
|
test_tiff_reader<mapnik::image_rgba8>("tiff_rgb");
|
||||||
|
}
|
||||||
|
|
||||||
SECTION("tiff-reader gray8") { test_tiff_reader<mapnik::image_gray8>("tiff_gray"); }
|
SECTION("tiff-reader gray8")
|
||||||
|
{
|
||||||
|
test_tiff_reader<mapnik::image_gray8>("tiff_gray");
|
||||||
|
}
|
||||||
|
|
||||||
SECTION("scan rgb8 striped")
|
SECTION("scan rgb8 striped")
|
||||||
{
|
{
|
||||||
|
|
|
@ -32,23 +32,62 @@
|
||||||
|
|
||||||
TEST_CASE("saturated cast")
|
TEST_CASE("saturated cast")
|
||||||
{
|
{
|
||||||
SECTION("int8") { CAST_ASSERT(std::int8_t); }
|
SECTION("int8")
|
||||||
SECTION("int16") { CAST_ASSERT(std::int16_t); }
|
{
|
||||||
SECTION("int32") { CAST_ASSERT(std::int32_t); }
|
CAST_ASSERT(std::int8_t);
|
||||||
|
}
|
||||||
|
SECTION("int16")
|
||||||
|
{
|
||||||
|
CAST_ASSERT(std::int16_t);
|
||||||
|
}
|
||||||
|
SECTION("int32")
|
||||||
|
{
|
||||||
|
CAST_ASSERT(std::int32_t);
|
||||||
|
}
|
||||||
|
|
||||||
SECTION("int64") { CAST_ASSERT2(std::int64_t); }
|
SECTION("int64")
|
||||||
SECTION("intmax") { CAST_ASSERT2(std::intmax_t); }
|
{
|
||||||
SECTION("intptr") { CAST_ASSERT2(std::intptr_t); }
|
CAST_ASSERT2(std::int64_t);
|
||||||
|
}
|
||||||
|
SECTION("intmax")
|
||||||
|
{
|
||||||
|
CAST_ASSERT2(std::intmax_t);
|
||||||
|
}
|
||||||
|
SECTION("intptr")
|
||||||
|
{
|
||||||
|
CAST_ASSERT2(std::intptr_t);
|
||||||
|
}
|
||||||
|
|
||||||
SECTION("uint8") { CAST_ASSERT(std::uint8_t); }
|
SECTION("uint8")
|
||||||
SECTION("uint16") { CAST_ASSERT(std::uint16_t); }
|
{
|
||||||
SECTION("uint32") { CAST_ASSERT(std::uint32_t); }
|
CAST_ASSERT(std::uint8_t);
|
||||||
|
}
|
||||||
|
SECTION("uint16")
|
||||||
|
{
|
||||||
|
CAST_ASSERT(std::uint16_t);
|
||||||
|
}
|
||||||
|
SECTION("uint32")
|
||||||
|
{
|
||||||
|
CAST_ASSERT(std::uint32_t);
|
||||||
|
}
|
||||||
|
|
||||||
SECTION("uint64") { CAST_ASSERT3(std::uint64_t); }
|
SECTION("uint64")
|
||||||
SECTION("uintmax") { CAST_ASSERT3(std::uintmax_t); }
|
{
|
||||||
SECTION("uintptr") { CAST_ASSERT3(std::uintptr_t); }
|
CAST_ASSERT3(std::uint64_t);
|
||||||
|
}
|
||||||
|
SECTION("uintmax")
|
||||||
|
{
|
||||||
|
CAST_ASSERT3(std::uintmax_t);
|
||||||
|
}
|
||||||
|
SECTION("uintptr")
|
||||||
|
{
|
||||||
|
CAST_ASSERT3(std::uintptr_t);
|
||||||
|
}
|
||||||
|
|
||||||
SECTION("float") { CAST_ASSERT4(float); }
|
SECTION("float")
|
||||||
|
{
|
||||||
|
CAST_ASSERT4(float);
|
||||||
|
}
|
||||||
|
|
||||||
SECTION("freeform")
|
SECTION("freeform")
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue