Files
OCCT/src/FoundationClasses/TKernel/NCollection/NCollection_BasePointerVector.cxx
T
Pasukhin Dmitry 6c24544fe1 Coding - Apply more flags from Clang-tidy (#977)
- Refactor boolean expressions and improve code readability across multiple files
- Simplified boolean expressions by removing unnecessary comparisons to true/false.
- Replaced explicit boolean checks with direct variable usage 

Used flags:
readability-static-accessed-through-instance
readability-simplify-boolean-expr
performance-for-range-copy
performance-move-const-arg
misc-unused-parameters
misc-redundant-expression
2026-01-03 12:18:59 +00:00

138 lines
4.0 KiB
C++

// Copyright (c) 2023 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#include <NCollection_BasePointerVector.hxx>
#include <cstring>
//=================================================================================================
NCollection_BasePointerVector::NCollection_BasePointerVector(
const NCollection_BasePointerVector& theOther)
: mySize(theOther.mySize),
myCapacity(theOther.myCapacity)
{
if (myCapacity > 0)
{
myArray = myAllocator.allocate(myCapacity);
memcpy(myArray, theOther.myArray, Size() * sizeof(void*));
}
}
//=================================================================================================
NCollection_BasePointerVector::NCollection_BasePointerVector(
NCollection_BasePointerVector&& theOther) noexcept
: mySize(theOther.mySize),
myCapacity(theOther.myCapacity),
myArray(theOther.myArray)
{
theOther.myCapacity = 0;
theOther.mySize = 0;
theOther.myArray = nullptr;
}
//=================================================================================================
void NCollection_BasePointerVector::Append(const void* thePnt)
{
if (mySize == myCapacity)
{
if (myCapacity == 0)
{
myCapacity = 8; // the most optimal initial value
}
else
{
myCapacity <<= 1;
}
myArray = myAllocator.reallocate(myArray, myCapacity);
}
myArray[mySize++] = (void*)thePnt;
}
//=================================================================================================
void NCollection_BasePointerVector::SetValue(const size_t theInd, const void* thePnt)
{
if (theInd >= myCapacity)
{
if (myCapacity == 0)
{
myCapacity = 8; // the most optimal initial value
}
while (myCapacity < theInd)
{
myCapacity <<= 1;
}
myArray = myAllocator.reallocate(myArray, myCapacity);
memset(myArray + mySize, 0, (theInd - mySize) * sizeof(void**));
mySize = theInd;
}
myArray[theInd] = (void*)thePnt;
}
//=================================================================================================
void NCollection_BasePointerVector::clear()
{
if (myCapacity > 0)
{
myAllocator.deallocate(myArray, myCapacity);
}
myArray = nullptr;
myCapacity = 0;
}
//=======================================================================
// function : operator=
// purpose :
//=======================================================================
NCollection_BasePointerVector& NCollection_BasePointerVector::operator=(
const NCollection_BasePointerVector& theOther)
{
if (this == &theOther)
{
return *this;
}
mySize = theOther.mySize;
if (myCapacity < theOther.myCapacity)
{
clear();
myCapacity = theOther.myCapacity;
myArray = myAllocator.allocate(myCapacity);
}
memcpy(myArray, theOther.myArray, mySize * sizeof(void*));
return *this;
}
//=======================================================================
// function : operator=
// purpose :
//=======================================================================
NCollection_BasePointerVector& NCollection_BasePointerVector::operator=(
NCollection_BasePointerVector&& theOther) noexcept
{
if (this == &theOther)
{
return *this;
}
clear();
mySize = theOther.mySize;
myCapacity = theOther.myCapacity;
myArray = theOther.myArray;
theOther.myCapacity = 0;
theOther.mySize = 0;
theOther.myArray = nullptr;
return *this;
}