diff options
author | John Firebaugh <john.firebaugh@gmail.com> | 2016-05-04 14:09:51 -0700 |
---|---|---|
committer | John Firebaugh <john.firebaugh@gmail.com> | 2016-05-04 14:09:51 -0700 |
commit | 10e522d10b33e5268b619296eae0ccad899809d9 (patch) | |
tree | 8b12ddd952fa2179a1937068efd91133e0ba88a8 /src | |
parent | bdf4f8155316a7e005dfb87fb5155d6158a5f7db (diff) | |
download | qtlocation-mapboxgl-10e522d10b33e5268b619296eae0ccad899809d9.tar.gz |
[core] Privatize various util headers (#4945)
Diffstat (limited to 'src')
-rw-r--r-- | src/mbgl/util/exclusive.hpp | 30 | ||||
-rw-r--r-- | src/mbgl/util/mat4.hpp | 53 | ||||
-rw-r--r-- | src/mbgl/util/ptr.hpp | 29 | ||||
-rw-r--r-- | src/mbgl/util/std.hpp | 30 |
4 files changed, 142 insertions, 0 deletions
diff --git a/src/mbgl/util/exclusive.hpp b/src/mbgl/util/exclusive.hpp new file mode 100644 index 0000000000..bb3395996b --- /dev/null +++ b/src/mbgl/util/exclusive.hpp @@ -0,0 +1,30 @@ +#ifndef MBGL_UTIL_EXCLUSIVE +#define MBGL_UTIL_EXCLUSIVE + +#include <memory> +#include <mutex> + + +namespace mbgl { +namespace util { + +template <class T> +class exclusive { +public: + inline exclusive(T* val, std::unique_ptr<std::lock_guard<std::mutex>> mtx) : ptr(val), lock(std::move(mtx)) {} + + inline T* operator->() { return ptr; } + inline const T* operator->() const { return ptr; } + inline T* operator*() { return ptr; } + inline const T* operator*() const { return ptr; } + +private: + T *ptr; + std::unique_ptr<std::lock_guard<std::mutex>> lock; +}; + + +} // end namespace util +} // end namespace mbgl + +#endif diff --git a/src/mbgl/util/mat4.hpp b/src/mbgl/util/mat4.hpp new file mode 100644 index 0000000000..ff8e65224c --- /dev/null +++ b/src/mbgl/util/mat4.hpp @@ -0,0 +1,53 @@ +// This is an incomplete port of http://glmatrix.net/ +// +// Copyright (c) 2013 Brandon Jones, Colin MacKenzie IV +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the +// use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not claim +// that you wrote the original software. If you use this software in a +// product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. + +#ifndef MBGL_UTIL_MAT4 +#define MBGL_UTIL_MAT4 + +#include <mbgl/util/vec.hpp> + +#include <array> + +namespace mbgl { + +using mat4 = std::array<double, 16>; + +namespace matrix { + +void identity(mat4& out); +bool invert(mat4& out, mat4& a); +void ortho(mat4& out, double left, double right, double bottom, double top, double near, double far); +void perspective(mat4& out, double fovy, double aspect, double near, double far); +void copy(mat4& out, const mat4& a); +void translate(mat4& out, const mat4& a, double x, double y, double z); +void rotate_x(mat4& out, const mat4& a, double rad); +void rotate_y(mat4& out, const mat4& a, double rad); +void rotate_z(mat4& out, const mat4& a, double rad); +void scale(mat4& out, const mat4& a, double x, double y, double z); +void multiply(mat4& out, const mat4& a, const mat4& b); + +void transformMat4(vec4<double>& out, vec4<double>& a, mat4& m); + +} // namespace matrix +} // namespace mbgl + +#endif // MBGL_UTIL_MAT4 diff --git a/src/mbgl/util/ptr.hpp b/src/mbgl/util/ptr.hpp new file mode 100644 index 0000000000..7e8f8ecc18 --- /dev/null +++ b/src/mbgl/util/ptr.hpp @@ -0,0 +1,29 @@ +#ifndef MBGL_UTIL_PTR +#define MBGL_UTIL_PTR + +#include <memory> +#include <cassert> + +namespace mbgl { +namespace util { + +template <typename T> +class ptr : public ::std::shared_ptr<T> { +public: + template <typename... Args> + inline ptr(Args &&... args) + : ::std::shared_ptr<T>(::std::forward<Args>(args)...) {} + + inline auto operator->() const -> decltype(this->::std::shared_ptr<T>::operator->()) { + assert(*this); + return ::std::shared_ptr<T>::operator->(); + } + inline auto operator*() const -> decltype(this->::std::shared_ptr<T>::operator*()) { + assert(*this); + return ::std::shared_ptr<T>::operator*(); + } +}; +} // namespace util +} // namespace mbgl + +#endif
\ No newline at end of file diff --git a/src/mbgl/util/std.hpp b/src/mbgl/util/std.hpp new file mode 100644 index 0000000000..bab5c1494d --- /dev/null +++ b/src/mbgl/util/std.hpp @@ -0,0 +1,30 @@ +#ifndef MBGL_UTIL_STD +#define MBGL_UTIL_STD + +#include <memory> +#include <type_traits> +#include <utility> + +namespace mbgl { +namespace util { + +template <typename Container, typename ForwardIterator, typename Predicate> +void erase_if(Container &container, ForwardIterator it, const ForwardIterator end, Predicate pred) { + while (it != end) { + if (pred(*it)) { + container.erase(it++); + } else { + ++it; + } + } +} + +template <typename Container, typename Predicate> +void erase_if(Container &container, Predicate pred) { + erase_if(container, container.begin(), container.end(), pred); +} + +} // namespace util +} // namespace mbgl + +#endif |