259 lines
4.4 KiB
C++
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
|