flatten 20260225

This commit is contained in:
Timothy Prepscius
2026-02-25 12:43:06 -05:00
commit 996151a56a
521 changed files with 46722 additions and 0 deletions

View File

@@ -0,0 +1,79 @@
// License: Modified MIT (NON-AI)
// See the LICENSE file in the root directory for license information.
// Copyright 2025 Timothy Prepscius
#pragma once
#include <atomic>
#include "Lock.hpp"
#include "../assert/release_assert.h"
namespace tjp::core {
struct ColliderImp
{
Mutex m;
std::atomic<int> read = 0;
std::atomic<int> write = 0;
} ;
struct TestCollisionReadImp
{
ColliderImp &collider;
TestCollisionReadImp (ColliderImp &collider_) :
collider(collider_)
{
auto l = lock_of(collider.m);
release_assert(collider.write == 0);
collider.read++;
}
~TestCollisionReadImp ()
{
collider.read--;
}
};
struct TestCollisionWriteImp
{
ColliderImp &collider;
TestCollisionWriteImp (ColliderImp &collider_) :
collider(collider_)
{
auto l = lock_of(collider.m);
release_assert(collider.write == 0);
release_assert(collider.read == 0);
collider.write++;
}
~TestCollisionWriteImp ()
{
collider.write--;
}
};
struct ColliderEmpty {};
struct TestCollisionEmpty
{
TestCollisionEmpty (ColliderEmpty &_){ (void)_; }
} ;
#ifdef DEBUG
using Collider = ColliderImp;
using TestCollisionRead = TestCollisionReadImp;
using TestCollisionWrite = TestCollisionWriteImp;
#else
using Collider = ColliderEmpty;
using TestCollisionRead = TestCollisionEmpty;
using TestCollisionWrite = TestCollisionEmpty;
#endif
using ColliderAlways = ColliderImp;
using TestCollisionReadAlways = TestCollisionReadImp;
using TestCollisionWriteAlways = TestCollisionReadImp;
} // namespace