summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJohn Firebaugh <john.firebaugh@gmail.com>2016-05-04 14:09:51 -0700
committerJohn Firebaugh <john.firebaugh@gmail.com>2016-05-04 14:09:51 -0700
commit10e522d10b33e5268b619296eae0ccad899809d9 (patch)
tree8b12ddd952fa2179a1937068efd91133e0ba88a8 /src
parentbdf4f8155316a7e005dfb87fb5155d6158a5f7db (diff)
downloadqtlocation-mapboxgl-10e522d10b33e5268b619296eae0ccad899809d9.tar.gz
[core] Privatize various util headers (#4945)
Diffstat (limited to 'src')
-rw-r--r--src/mbgl/util/exclusive.hpp30
-rw-r--r--src/mbgl/util/mat4.hpp53
-rw-r--r--src/mbgl/util/ptr.hpp29
-rw-r--r--src/mbgl/util/std.hpp30
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