Files
LBPM/common/Array.cpp

259 lines
4.4 KiB
C++

#if 0
#include "Array.h"
/*
* Array.cpp
*
* Created by James Mcclure on 3/31/09.
* Copyright 2009 __MyCompanyName__. All rights reserved.
*
*/
// *****************************************
// ******** class IntArray ****************
// *****************************************
IntArray::IntArray()
{
m=n=o=Length=0;
}
IntArray::IntArray(int size)
{
data = new int [size];
Length = size;
m = size;
n = 1;
o = 1;
}
IntArray::IntArray(int nx, int ny)
{
m = nx;
n = ny;
o = 1;
Length = m*n;
data = new int [Length];
}
IntArray::IntArray(int nx, int ny, int nz)
{
m = nx;
n = ny;
o = nz;
Length = m*n*o;
data = new int [Length];
}
IntArray::~IntArray()
{
delete data;
}
void IntArray::New(int size)
{
m=size;
n = 1;
o = 1;
data = new int [size];
Length = size;
}
void IntArray::New(int nx, int ny)
{
m = nx;
n = ny;
o = 1;
Length = m*n;
data = new int [Length];
}
void IntArray::New(int nx, int ny,int nz)
{
m = nx;
n = ny;
o = nz;
Length = m*n*o;
data = new int [Length];
}
int IntArray::e(int i)
{
return data[i];
}
int IntArray::e(int i, int j)
{
return data[m*j+i];
}
int IntArray::e(int i, int j, int k)
{
return data[m*n*k+m*j+i];
}
// *****************************************
// ******** class DoubleArray **************
// *****************************************
DoubleArray::DoubleArray()
{
m=n=o=Length=0;
}
DoubleArray::DoubleArray(int size)
{
m=size;
n = 1;
o = 1;
data = new double [size];
Length = size;
}
DoubleArray::DoubleArray(int nx, int ny)
{
m = nx;
n = ny;
o = 1;
Length = m*n;
data = new double [Length];
}
DoubleArray::DoubleArray(int nx, int ny,int nz)
{
m = nx;
n = ny;
o = nz;
Length = m*n*o;
data = new double [Length];
}
void DoubleArray::New(int size)
{
m=size;
n = 1;
o = 1;
data = new double [size];
Length = size;
}
void DoubleArray::New(int nx, int ny)
{
m = nx;
n = ny;
o = 1;
Length = m*n;
data = new double [Length];
}
void DoubleArray::New(int nx, int ny,int nz)
{
m = nx;
n = ny;
o = nz;
Length = m*n*o;
data = new double [Length];
}
DoubleArray::~DoubleArray()
{
delete data;
}
double DoubleArray::e(int i)
{
return data[i];
}
double DoubleArray::e(int i, int j)
{
return data[j*m+i];
}
double DoubleArray::e(int i, int j, int k)
{
return data[k*m*n+j*m+i];
}
extern DoubleArray IncreaseSize(DoubleArray &A, int addLength)
{
if (addLength<0) {
printf("IncreaseSize(Array,Length)","Length needs to be >0.");
return DoubleArray();
}
int newM,newN,newO;
if (A.o>1) {
if (addLength%(A.m*A.n)!=0) {
printf("IncreaseSize(Array,Length)","Length needs to be a multiple of m*n");
return DoubleArray();
}
newM = A.m;
newN = A.n;
newO = A.o + addLength/(A.m*A.n);
}
else if (A.n>1) {
if (addLength%(A.m)!=0) {
printf("IncreaseSize(Array,Length)","Length needs to be a multiple of m");
return DoubleArray();
}
newM = A.m;
newN = A.n + addLength/A.m;
newO = 1;
}
else {
newM = A.m + addLength;
newN = 1;
newO = 1;
}
DoubleArray toReturn(newM,newN,newO);
memcpy(toReturn.Pointer(),A.Pointer(),A.Length*sizeof(double));
return toReturn;
}
extern IntArray IncreaseSize(IntArray &A, int addLength)
{
if (addLength<0) {
printf("IncreaseSize(Array,Length)","Length needs to be >0.");
return IntArray();
}
int newM,newN,newO;
if (A.o>1) {
if (addLength%(A.m*A.n)!=0) {
printf("IncreaseSize(Array,Length)","Length needs to be a multiple of m*n");
return IntArray();
}
newM = A.m;
newN = A.n;
newO = A.o + addLength/(A.m*A.n);
}
else if (A.n>1) {
if (addLength%(A.m)!=0) {
printf("IncreaseSize(Array,Length)","Length needs to be a multiple of m");
return IntArray();
}
newM = A.m;
newN = A.n + addLength/A.m;
newO = 1;
}
else {
newM = A.m + addLength;
newN = 1;
newO = 1;
}
IntArray toReturn(newM,newN,newO);
memcpy(toReturn.Pointer(),A.Pointer(),A.Length*sizeof(int));
return toReturn;
}
DoubleArray DoubleArray::Copy()
{
DoubleArray CopyInto(m,n,o);
// Check that the allocation worked.
if (CopyInto.Length!=Length) return CopyInto; // Failed. Already printed an error message.
memcpy(CopyInto.Pointer(),Pointer(),Length*sizeof(double));
return CopyInto;
}
#endif