/* * MoveSegment.cpp * * Created on: 26 Feb 2021 * Author: David */ #include "MoveSegment.h" // Static members MoveSegment *MoveSegment::freeList = nullptr; unsigned int MoveSegment::numCreated = 0; void MoveSegment::InitialAllocate(unsigned int num) noexcept { while (num > numCreated) { freeList = new MoveSegment(freeList); ++numCreated; } } // Allocate a MoveSegment, from the freelist if possible, else create a new one. Not thread-safe. Clears the flags. MoveSegment *MoveSegment::Allocate(MoveSegment *next) noexcept { MoveSegment * ms = freeList; if (ms != nullptr) { freeList = ms->GetNext(); ms->nextAndFlags = reinterpret_cast(next); } else { ms = new MoveSegment(next); ++numCreated; } return ms; } void MoveSegment::AddToTail(MoveSegment *tail) noexcept { MoveSegment *seg = this; while (seg->GetNext() != nullptr) { seg = seg->GetNext(); } seg->SetNext(tail); } void MoveSegment::DebugPrint(char ch) const noexcept { #if MS_USE_FPU debugPrintf("%c d=%.4e t=%.1f ", ch, (double)segLength, (double)segTime); if (IsLinear()) { debugPrintf("c=%.4e\n", (double)c); } else { debugPrintf("b=%.4e c=%.4e\n", (double)b, (double)c); } #else debugPrintf("%c d=%" PRIu32 " t=%" PRIu32 " ", ch, iSegLength, iSegTime); if (IsLinear()) { debugPrintf("c=%" PRIi32 "\n", ic); } else { debugPrintf("b=%" PRIi32 " c=%" PRIi32 "\n", ib, ic); } #endif } // End