54 virtual bool visitNode(TCODBsp *node,
void *userData) = 0;
65class TCODLIB_API TCODBsp :
public TCODTree {
67 int x{}, y{}, w{}, h{};
87 TCODBsp() : level{0} {}
88 TCODBsp(
int x,
int y,
int w,
int h) : x{x}, y{y}, w{w}, h{h}, level{0} {}
90 TCODBsp(
const TCODBsp&) =
delete;
91 TCODBsp& operator=(
const TCODBsp&) =
delete;
92 TCODBsp(TCODBsp&& rhs)
noexcept { (*this) = std::move(rhs); };
93 TCODBsp& operator=(TCODBsp&& rhs)
noexcept {
98 friend void swap(TCODBsp& lhs, TCODBsp& rhs)
noexcept {
99 std::swap(lhs.x, rhs.x);
100 std::swap(lhs.y, rhs.y);
101 std::swap(lhs.w, rhs.w);
102 std::swap(lhs.h, rhs.h);
103 std::swap(lhs.position, rhs.position);
104 std::swap(lhs.horizontal, rhs.horizontal);
105 std::swap(lhs.level, rhs.level);
106 std::swap(lhs.next, rhs.next);
107 std::swap(lhs.father, rhs.father);
108 std::swap(lhs.sons, rhs.sons);
188 void splitOnce(
bool horizontal,
int position);
214 void splitRecursive(TCODRandom *randomizer,
int nb,
int minHSize,
int minVSize,
float maxHRatio,
float maxVRatio);
245 void resize(
int x,
int y,
int w,
int h);
308 TCODBsp *getLeft()
const {
309 return static_cast<TCODBsp*
>(sons);
311 TCODBsp *getRight()
const {
312 return sons ?
static_cast<TCODBsp*
>(sons->next) : NULL;
314 TCODBsp *getFather()
const {
315 return static_cast<TCODBsp*
>(father);
327 bool isLeaf()
const {
return sons == NULL ; }
340 bool contains(
int x,
int y)
const;
353 TCODBsp *findNode(
int x,
int y);
429 bool traversePreOrder(ITCODBspCallback* listener,
void* userData);
430 bool traverseInOrder(ITCODBspCallback* listener,
void* userData);
431 bool traversePostOrder(ITCODBspCallback* listener,
void* userData);
432 bool traverseLevelOrder(ITCODBspCallback* listener,
void* userData);
433 bool traverseInvertedLevelOrder(ITCODBspCallback* listener,
void* userData);
445 template <
typename VisitorFunc>
446 bool traversePreOrder(VisitorFunc&& visitor) {
447 auto visitor_instance = LambdaVisitor<VisitorFunc>{};
448 return traversePreOrder(&visitor_instance,
static_cast<void*
>(&visitor));
460 template <
typename VisitorFunc>
461 bool traverseInOrder(VisitorFunc&& visitor) {
462 auto visitor_instance = LambdaVisitor<VisitorFunc>{};
463 return traverseInOrder(&visitor_instance,
static_cast<void*
>(&visitor));
475 template <
typename VisitorFunc>
476 bool traversePostOrder(VisitorFunc&& visitor) {
477 auto visitor_instance = LambdaVisitor<VisitorFunc>{};
478 return traversePostOrder(&visitor_instance,
static_cast<void*
>(&visitor));
490 template <
typename VisitorFunc>
491 bool traverseLevelOrder(VisitorFunc&& visitor) {
492 auto visitor_instance = LambdaVisitor<VisitorFunc>{};
493 return traverseLevelOrder(&visitor_instance,
static_cast<void*
>(&visitor));
505 template <
typename VisitorFunc>
506 bool traverseInvertedLevelOrder(VisitorFunc&& visitor) {
507 auto visitor_instance = LambdaVisitor<VisitorFunc>{};
508 return traverseInvertedLevelOrder(&visitor_instance,
static_cast<void*
>(&visitor));
512 TCODBsp(TCODBsp* father,
bool left);
520 template <
typename VisitorFunc>
521 class LambdaVisitor final :
public ITCODBspCallback {
525 bool visitNode(TCODBsp* node,
void* callback)
override {
526 if constexpr (std::is_same_v<typename std::invoke_result<VisitorFunc, TCODBsp&>::type,
void>) {
527 (*
static_cast<VisitorFunc*
>(callback))(*node);
530 return ((*
static_cast<VisitorFunc*
>(callback))(*node));
Binary space partitioning module.
Deprecated TCODList class.
Random number generator C++ module.