Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 24 additions & 12 deletions blitz/array-impl.h
Original file line number Diff line number Diff line change
Expand Up @@ -1107,41 +1107,53 @@ class Array : public MemoryBlockReference<P_numtype>


void resizeAndPreserve(const TinyVector<int,
N_rank>&);
void resizeAndPreserve(int extent);
N_rank>&,
bool zeroInitialize=false);
void resizeAndPreserve(int extent,
bool zeroInitialize=false);
void resizeAndPreserve(int extent1,
int extent2);
int extent2,
bool zeroInitialize=false);
void resizeAndPreserve(int extent1,
int extent2, int extent3);
int extent2, int extent3,
bool zeroInitialize=false);
void resizeAndPreserve(int extent1,
int extent2, int extent3, int extent4);
int extent2, int extent3, int extent4,
bool zeroInitialize=false);
void resizeAndPreserve(int extent1,
int extent2, int extent3, int extent4,
int extent5);
int extent5,
bool zeroInitialize=false);
void resizeAndPreserve(int extent1,
int extent2, int extent3, int extent4,
int extent5, int extent6);
int extent5, int extent6,
bool zeroInitialize=false);
void resizeAndPreserve(int extent1,
int extent2, int extent3, int extent4,
int extent5, int extent6, int extent7);
int extent5, int extent6, int extent7,
bool zeroInitialize=false);
void resizeAndPreserve(int extent1,
int extent2, int extent3, int extent4,
int extent5, int extent6, int extent7,
int extent8);
int extent8,
bool zeroInitialize=false);
void resizeAndPreserve(int extent1,
int extent2, int extent3, int extent4,
int extent5, int extent6, int extent7,
int extent8, int extent9);
int extent8, int extent9,
bool zeroInitialize=false);
void resizeAndPreserve(int extent1,
int extent2, int extent3, int extent4,
int extent5, int extent6, int extent7,
int extent8, int extent9,
int extent10);
int extent10,
bool zeroInitialize=false);
void resizeAndPreserve(int extent1,
int extent2, int extent3, int extent4,
int extent5, int extent6, int extent7,
int extent8, int extent9, int extent10,
int extent11);
int extent11,
bool zeroInitialize=false);

// NEEDS_WORK -- resizeAndPreserve(Range,...)
// NEEDS_WORK -- resizeAndPreserve(const Domain<N_rank>&);
Expand Down
53 changes: 41 additions & 12 deletions blitz/array/resize.cc
Original file line number Diff line number Diff line change
Expand Up @@ -567,7 +567,8 @@ void Array<T_numtype, N_rank>::resize(Range r0, Range r1, Range r2,


template<typename T_numtype, int N_rank>
void Array<T_numtype, N_rank>::resizeAndPreserve(int length0)
void Array<T_numtype, N_rank>::resizeAndPreserve(int length0,
bool zeroInitialize)
{
BZPRECONDITION(length0 > 0);
BZPRECONDITION(N_rank == 1);
Expand Down Expand Up @@ -595,6 +596,8 @@ void Array<T_numtype, N_rank>::resizeAndPreserve(int length0)
#endif
if (numElements())
{
if (zeroInitialize)
B = 0;
Range overlap0 = Range(fromStart, (extrema::min)(B.ubound(0),
ubound(0)));
B(overlap0) = (*this)(overlap0);
Expand All @@ -604,7 +607,8 @@ void Array<T_numtype, N_rank>::resizeAndPreserve(int length0)
}

template<typename T_numtype, int N_rank>
void Array<T_numtype, N_rank>::resizeAndPreserve(int length0, int length1)
void Array<T_numtype, N_rank>::resizeAndPreserve(int length0, int length1,
bool zeroInitialize)
{
BZPRECONDITION((length0 > 0) && (length1 > 0));
BZPRECONDITION(N_rank == 2);
Expand All @@ -615,6 +619,8 @@ void Array<T_numtype, N_rank>::resizeAndPreserve(int length0, int length1)

if (numElements())
{
if (zeroInitialize)
B = 0;
Range overlap0 = Range(fromStart, (extrema::min)(B.ubound(0),
ubound(0)));
Range overlap1 = Range(fromStart, (extrema::min)(B.ubound(1),
Expand All @@ -627,7 +633,7 @@ void Array<T_numtype, N_rank>::resizeAndPreserve(int length0, int length1)

template<typename T_numtype, int N_rank>
void Array<T_numtype, N_rank>::resizeAndPreserve(int length0, int length1,
int length2)
int length2, bool zeroInitialize)
{
BZPRECONDITION((length0 > 0) && (length1 > 0) && (length2 > 0));
BZPRECONDITION(N_rank == 3);
Expand All @@ -639,6 +645,8 @@ void Array<T_numtype, N_rank>::resizeAndPreserve(int length0, int length1,
storage_);
if (numElements())
{
if (zeroInitialize)
B = 0;
Range overlap0 = Range(fromStart, (extrema::min)(B.ubound(0),
ubound(0)));
Range overlap1 = Range(fromStart, (extrema::min)(B.ubound(1),
Expand All @@ -654,7 +662,7 @@ void Array<T_numtype, N_rank>::resizeAndPreserve(int length0, int length1,

template<typename T_numtype, int N_rank>
void Array<T_numtype, N_rank>::resizeAndPreserve(int length0, int length1,
int length2, int length3)
int length2, int length3, bool zeroInitialize)
{
BZPRECONDITION((length0 > 0) && (length1 > 0) && (length2 > 0)
&& (length3 > 0));
Expand All @@ -668,6 +676,8 @@ void Array<T_numtype, N_rank>::resizeAndPreserve(int length0, int length1,

if (numElements())
{
if (zeroInitialize)
B = 0;
Range overlap0 = Range(fromStart, (extrema::min)(B.ubound(0), ubound(0)));
Range overlap1 = Range(fromStart, (extrema::min)(B.ubound(1), ubound(1)));
Range overlap2 = Range(fromStart, (extrema::min)(B.ubound(2), ubound(2)));
Expand All @@ -681,7 +691,7 @@ void Array<T_numtype, N_rank>::resizeAndPreserve(int length0, int length1,

template<typename T_numtype, int N_rank>
void Array<T_numtype, N_rank>::resizeAndPreserve(int length0, int length1,
int length2, int length3, int length4)
int length2, int length3, int length4, bool zeroInitialize)
{
BZPRECONDITION((length0 > 0) && (length1 > 0) && (length2 > 0)
&& (length3 > 0) && (length4 > 0));
Expand All @@ -696,6 +706,8 @@ void Array<T_numtype, N_rank>::resizeAndPreserve(int length0, int length1,

if (numElements())
{
if (zeroInitialize)
B = 0;
Range overlap0 = Range(fromStart, (extrema::min)(B.ubound(0), ubound(0)));
Range overlap1 = Range(fromStart, (extrema::min)(B.ubound(1), ubound(1)));
Range overlap2 = Range(fromStart, (extrema::min)(B.ubound(2), ubound(2)));
Expand All @@ -710,7 +722,8 @@ void Array<T_numtype, N_rank>::resizeAndPreserve(int length0, int length1,

template<typename T_numtype, int N_rank>
void Array<T_numtype, N_rank>::resizeAndPreserve(int length0, int length1,
int length2, int length3, int length4, int length5)
int length2, int length3, int length4, int length5,
bool zeroInitialize)
{
BZPRECONDITION((length0 > 0) && (length1 > 0) && (length2 > 0)
&& (length3 > 0) && (length4 > 0) && (length5 > 0));
Expand All @@ -725,6 +738,8 @@ void Array<T_numtype, N_rank>::resizeAndPreserve(int length0, int length1,

if (numElements())
{
if (zeroInitialize)
B = 0;
Range overlap0 = Range(fromStart, (extrema::min)(B.ubound(0), ubound(0)));
Range overlap1 = Range(fromStart, (extrema::min)(B.ubound(1), ubound(1)));
Range overlap2 = Range(fromStart, (extrema::min)(B.ubound(2), ubound(2)));
Expand All @@ -742,7 +757,8 @@ void Array<T_numtype, N_rank>::resizeAndPreserve(int length0, int length1,
/* Added by Julian Cummings */
template<typename T_numtype, int N_rank>
void Array<T_numtype, N_rank>::resizeAndPreserve(int length0, int length1,
int length2, int length3, int length4, int length5, int length6)
int length2, int length3, int length4, int length5, int length6,
bool zeroInitialize)
{
BZPRECONDITION((length0 > 0) && (length1 > 0) && (length2 > 0)
&& (length3 > 0) && (length4 > 0) && (length5 > 0) && (length6 > 0));
Expand All @@ -758,6 +774,8 @@ void Array<T_numtype, N_rank>::resizeAndPreserve(int length0, int length1,

if (numElements())
{
if (zeroInitialize)
B = 0;
Range overlap0 = Range(fromStart, (extrema::min)(B.ubound(0),
ubound(0)));
Range overlap1 = Range(fromStart, (extrema::min)(B.ubound(1),
Expand Down Expand Up @@ -785,7 +803,7 @@ void Array<T_numtype, N_rank>::resizeAndPreserve(int length0, int length1,
template<typename T_numtype, int N_rank>
void Array<T_numtype, N_rank>::resizeAndPreserve(int length0, int length1,
int length2, int length3, int length4, int length5, int length6,
int length7)
int length7, bool zeroInitialize)
{
BZPRECONDITION((length0 > 0) && (length1 > 0) && (length2 > 0)
&& (length3 > 0) && (length4 > 0) && (length5 > 0) && (length6 > 0)
Expand All @@ -802,6 +820,8 @@ void Array<T_numtype, N_rank>::resizeAndPreserve(int length0, int length1,

if (numElements())
{
if (zeroInitialize)
B = 0;
Range overlap0 = Range(fromStart, (extrema::min)(B.ubound(0),
ubound(0)));
Range overlap1 = Range(fromStart, (extrema::min)(B.ubound(1),
Expand Down Expand Up @@ -831,7 +851,7 @@ void Array<T_numtype, N_rank>::resizeAndPreserve(int length0, int length1,
template<typename T_numtype, int N_rank>
void Array<T_numtype, N_rank>::resizeAndPreserve(int length0, int length1,
int length2, int length3, int length4, int length5, int length6,
int length7, int length8)
int length7, int length8, bool zeroInitialize)
{
BZPRECONDITION((length0 > 0) && (length1 > 0) && (length2 > 0)
&& (length3 > 0) && (length4 > 0) && (length5 > 0) && (length6 > 0)
Expand All @@ -849,6 +869,8 @@ void Array<T_numtype, N_rank>::resizeAndPreserve(int length0, int length1,

if (numElements())
{
if (zeroInitialize)
B = 0;
Range overlap0 = Range(fromStart, (extrema::min)(B.ubound(0),
ubound(0)));
Range overlap1 = Range(fromStart, (extrema::min)(B.ubound(1),
Expand Down Expand Up @@ -880,7 +902,7 @@ void Array<T_numtype, N_rank>::resizeAndPreserve(int length0, int length1,
template<typename T_numtype, int N_rank>
void Array<T_numtype, N_rank>::resizeAndPreserve(int length0, int length1,
int length2, int length3, int length4, int length5, int length6,
int length7, int length8, int length9)
int length7, int length8, int length9, bool zeroInitialize)
{
BZPRECONDITION((length0 > 0) && (length1 > 0) && (length2 > 0)
&& (length3 > 0) && (length4 > 0) && (length5 > 0) && (length6 > 0)
Expand All @@ -899,6 +921,8 @@ void Array<T_numtype, N_rank>::resizeAndPreserve(int length0, int length1,

if (numElements())
{
if (zeroInitialize)
B = 0;
Range overlap0 = Range(fromStart, (extrema::min)(B.ubound(0),
ubound(0)));
Range overlap1 = Range(fromStart, (extrema::min)(B.ubound(1),
Expand Down Expand Up @@ -932,7 +956,8 @@ void Array<T_numtype, N_rank>::resizeAndPreserve(int length0, int length1,
template<typename T_numtype, int N_rank>
void Array<T_numtype, N_rank>::resizeAndPreserve(int length0, int length1,
int length2, int length3, int length4, int length5, int length6,
int length7, int length8, int length9, int length10)
int length7, int length8, int length9, int length10,
bool zeroInitialize)
{
BZPRECONDITION((length0 > 0) && (length1 > 0) && (length2 > 0)
&& (length3 > 0) && (length4 > 0) && (length5 > 0) && (length6 > 0)
Expand All @@ -952,6 +977,8 @@ void Array<T_numtype, N_rank>::resizeAndPreserve(int length0, int length1,

if (numElements())
{
if (zeroInitialize)
B = 0;
Range overlap0 = Range(fromStart, (extrema::min)(B.ubound(0),
ubound(0)));
Range overlap1 = Range(fromStart, (extrema::min)(B.ubound(1),
Expand Down Expand Up @@ -998,7 +1025,7 @@ void Array<T_numtype, N_rank>::resize(const TinyVector<int,N_rank>& extent)
/* Added by Julian Cummings */
template<typename T_numtype, int N_rank>
void Array<T_numtype, N_rank>::resizeAndPreserve(
const TinyVector<int,N_rank>& extent)
const TinyVector<int,N_rank>& extent, bool zeroInitialize)
{
// NEEDS_WORK -- don't resize if unnecessary
// BZPRECONDITION(all(extent > 0));
Expand All @@ -1008,6 +1035,8 @@ void Array<T_numtype, N_rank>::resizeAndPreserve(

if (numElements())
{
if (zeroInitialize)
B = 0;
TinyVector<int,N_rank> ub;
for (int d=0; d < N_rank; ++d)
ub(d) = (extrema::min)(B.ubound(d),ubound(d));
Expand Down
5 changes: 3 additions & 2 deletions doc/arrays-members.texi
Original file line number Diff line number Diff line change
Expand Up @@ -429,15 +429,16 @@ the contents of the array are garbage. See also @code{resizeAndPreserve()}.
@findex resizeAndPreserve()
@cindex Array member functions @code{resizeAndPreserve()}
@example
void resizeAndPreserve(int extent1, ...);
void resizeAndPreserve(int extent1, ..., bool zeroInitialize=false);
void resizeAndPreserve(const TinyVector<int,N_rank>&);
@end example

These functions resize an array to the specified size. If the array is
already the size specified, then no change occurs (the array is not
reallocated and copied). The contents of the array are preserved whenever
possible; if the new array size is smaller, then some data will be lost.
Any new elements created by resizing the array are left uninitialized.
Any new elements created by resizing the array are left uninitialized
unless zeroInitialize is set to true.

@findex reverse(), reverseSelf()
@cindex Array member functions @code{reverse()}
Expand Down
4 changes: 2 additions & 2 deletions manual/arrays-members.yo
Original file line number Diff line number Diff line change
Expand Up @@ -417,15 +417,15 @@ garbage. See also tt(resizeAndPreserve()).
bzindex(resizeAndPreserve())
bzindex(Array!member functions!resizeAndPreserve())
bf(bzverb(\
void resizeAndPreserve(int extent1, ...);
void resizeAndPreserve(int extent1, ..., bool zeroInitialize=false);
void resizeAndPreserve(const TinyVector<int,N_rank>&)));
These functions resize an array to the specified size. If
the array is already the size specified, then no change
occurs (the array is not reallocated and copied).
The contents of the array are preserved whenever possible;
if the new array size is smaller, then some data will be
lost. Any new elements created by resizing the array
are left uninitialized.
are left uninitialized unless zeroInitialize is set to true.

bzindex(reverse(), reverseSelf())
bzindex(Array!member functions!reverse())
Expand Down
4 changes: 2 additions & 2 deletions manual/blitz02.html
Original file line number Diff line number Diff line change
Expand Up @@ -1151,15 +1151,15 @@ <h1>Chapter 2: Arrays</h1>
garbage. See also <code>resizeAndPreserve()</code>.
<p><!-- BZINDEX resizeAndPreserve() --><a name="index00174">
<!-- BZINDEX Array!member functions!resizeAndPreserve() --><a name="index00175">
<strong><pre>void resizeAndPreserve(int extent1, ...);
<strong><pre>void resizeAndPreserve(int extent1, ..., bool zeroInitialize=false);
void resizeAndPreserve(const TinyVector&lt;int,N_rank&gt;&amp;)</pre></strong>;
These functions resize an array to the specified size. If
the array is already the size specified, then no change
occurs (the array is not reallocated and copied).
The contents of the array are preserved whenever possible;
if the new array size is smaller, then some data will be
lost. Any new elements created by resizing the array
are left uninitialized.
are left uninitialized unless zeroInitialize is set to true.
<p><!-- BZINDEX reverse(), reverseSelf() --><a name="index00176">
<!-- BZINDEX Array!member functions!reverse() --><a name="index00177">
<!-- BZINDEX Array!member functions!reverseSelf() --><a name="index00178">
Expand Down