#pragma once
#include <atomic>
#include <memory>
#include <mutex>
#include <unordered_map>
#include "./vec.h"
#include "manifold/common.h"
#ifndef MANIFOLD_PAR
#error "MANIFOLD_PAR must be defined to either 1 (parallel) or -1 (series)"
#else
#if (MANIFOLD_PAR != 1) && (MANIFOLD_PAR != -1)
#define XSTR …
#define STR …
#pragma message "Current value of MANIFOLD_PAR is: " XSTR(MANIFOLD_PAR)
#error "MANIFOLD_PAR must be defined to either 1 (parallel) or -1 (series)"
#endif
#endif
#include "./parallel.h"
#if __has_include(<tracy/Tracy.hpp>)
#include <tracy/Tracy.hpp>
#else
#define FrameMarkStart(x) …
#define FrameMarkEnd(x) …
#define ZoneScoped
#define ZoneScopedN(name) …
#endif
namespace manifold {
[[nodiscard]] constexpr std::size_t operator""_uz(
unsigned long long n) noexcept { … }
constexpr double kPrecision = …;
inline int Next3(int i) { … }
inline int Prev3(int i) { … }
template <typename T, typename T1>
void Permute(Vec<T>& inOut, const Vec<T1>& new2Old) { … }
template <typename T, typename T1>
void Permute(std::vector<T>& inOut, const Vec<T1>& new2Old) { … }
template <typename T>
T AtomicAdd(T& target, T add) { … }
template <>
inline int AtomicAdd(int& target, int add) { … }
template <typename T>
class ConcurrentSharedPtr { … };
template <typename I = int, typename R = unsigned char>
struct UnionFind { … };
template <typename T>
struct Identity { … };
template <typename T>
struct Negate { … };
inline int CCW(vec2 p0, vec2 p1, vec2 p2, double tol) { … }
inline mat4 Mat4(mat3x4 a) { … }
inline mat3 Mat3(mat2x3 a) { … }
}