mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-07-05 03:21:42 +00:00
This is a breaking change to dependencies that use the static ntcore library. Unless the wpiutil library is also linked, linker errors will result. This does not affect the shared ntcore library.
42 lines
1.5 KiB
C++
42 lines
1.5 KiB
C++
//===- llvm/ADT/SmallVector.cpp - 'Normally small' vectors ----------------===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This file implements the SmallVector class.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "llvm/SmallVector.h"
|
|
using namespace llvm;
|
|
|
|
/// grow_pod - This is an implementation of the grow() method which only works
|
|
/// on POD-like datatypes and is out of line to reduce code duplication.
|
|
void SmallVectorBase::grow_pod(void *FirstEl, size_t MinSizeInBytes,
|
|
size_t TSize) {
|
|
size_t CurSizeBytes = size_in_bytes();
|
|
size_t NewCapacityInBytes = 2 * capacity_in_bytes() + TSize; // Always grow.
|
|
if (NewCapacityInBytes < MinSizeInBytes)
|
|
NewCapacityInBytes = MinSizeInBytes;
|
|
|
|
void *NewElts;
|
|
if (BeginX == FirstEl) {
|
|
NewElts = malloc(NewCapacityInBytes);
|
|
|
|
// Copy the elements over. No need to run dtors on PODs.
|
|
memcpy(NewElts, this->BeginX, CurSizeBytes);
|
|
} else {
|
|
// If this wasn't grown from the inline copy, grow the allocated space.
|
|
NewElts = realloc(this->BeginX, NewCapacityInBytes);
|
|
}
|
|
assert(NewElts && "Out of memory");
|
|
|
|
this->EndX = (char*)NewElts+CurSizeBytes;
|
|
this->BeginX = NewElts;
|
|
this->CapacityX = (char*)this->BeginX + NewCapacityInBytes;
|
|
}
|