00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #include "l1394_qarray.h"
00019 using namespace std;
00020 namespace L1394{
00021 QArray::QArray(int size)
00022 {
00023 if (size < 1)
00024 {
00025 this->size = 0;
00026 qarray = new Quadlet[1];
00027 internal_size = 1;
00028 }
00029 else
00030 {
00031 this->size = size;
00032 qarray = new Quadlet[size];
00033 internal_size = size;
00034 }
00035 }
00036
00037 QArray::QArray(const QArray &qa)
00038 {
00039 size = qa.size;
00040 internal_size = qa.internal_size;
00041 qarray = new Quadlet[size];
00042 for (unsigned int i = 0 ; i < qa.size; i++)
00043 memcpy(&(qarray[i]), &(qa.qarray[i]), 4);
00044 }
00045
00046 QArray::~QArray()
00047 {
00048 delete [] qarray;
00049 }
00050
00051 void QArray::append(const QArray& new_data)
00052 {
00053 while(internal_size < size+new_data.getSize())
00054 resize((new_data.getSize() / size)+1);
00055
00056
00057 for (int i = 0; i< new_data.getSize(); i++)
00058 qarray[size+i] = new_data.getQuadlet(i);
00059
00060 size = size + new_data.getSize();
00061
00062 }
00063 void QArray::resize(const u_int factor)
00064 {
00065 Quadlet *new_array = new Quadlet[internal_size * factor];
00066
00067 for (u_int i = 0; i< size; i++)
00068 new_array[i] = qarray[i];
00069
00070 delete [] qarray;
00071
00072 qarray = new_array;
00073
00074 internal_size = internal_size * factor;
00075
00076 }
00077 void QArray::insert(const Quadlet value,const unsigned int i)
00078 {
00079 if (i < size)
00080 qarray[i] = value;
00081
00082 else std::cout << "L1394 Error : L1394QArray > Value couldn't be insert. Array is to small." << endl;
00083 }
00084
00085 void QArray::insert(const u_int32_t value,const unsigned int i)
00086 {
00087 if (i < size)
00088 qarray[i] = Quadlet(value);
00089
00090 else std::cout << "L1394 Error : L1394QArray > Value couldn't be insert. Array is to small." << endl;
00091 }
00092
00093 ostream& operator<<(std::ostream &o, const QArray& qa)
00094 {
00095 for (unsigned int i = 0; i< qa.size; i++)
00096 o << qa.qarray[i]<< endl;
00097
00098 return o;
00099 }
00100
00101 void QArray::toIntArray(u_int32_t* data) const
00102 {
00103 for (unsigned int i = 0; i < size; i++)
00104 data[i] = qarray[i].toInt();
00105 }
00106
00107 QArray& QArray::operator= (const QArray& qa)
00108 {
00109 if (*this == qa)
00110 return *this;
00111
00112 if (size < qa.size)
00113 {
00114 cout << "L1394 WARNING: L1394::QArray > array too small " << endl;
00115 size = qa.size;
00116 internal_size = qa.internal_size;
00117 delete [] qarray;
00118 qarray = new Quadlet[size];
00119 }
00120
00121 internal_size = qa.internal_size;
00122
00123 for (unsigned int i = 0; i<size; i++)
00124 qarray[i] = qa.qarray[i];
00125
00126 for (unsigned int i = qa.size; i<size; i++)
00127 qarray[i].fromInt(0);
00128
00129 return *this;
00130 }
00131
00132 bool QArray::operator== (const QArray& qa)
00133 {
00134 int max = 0;
00135 if (size < qa.size)
00136 max = size;
00137 else
00138 max = qa.size;
00139
00140 for (int i = 0; i < max; i++)
00141 if(qarray[i] != qa.qarray[i])
00142 return false;
00143
00144 return true;
00145 }
00146
00147 void QArray::toCharArray(u_char* data) const
00148 {
00149 for (unsigned int i = 0; i<4*size;i++)
00150 data[i] = (char)(qarray[i/4].getByte(i%4));
00151 }
00152
00153 void QArray::setByte(const unsigned int i, const unsigned int value)
00154 {
00155 if (i >= 4*size)
00156 {
00157 cout << "L1394 WARNING : L1394QArray > invalid position" << endl;
00158 return;
00159 }
00160 if (value > 0xff)
00161 cout << "L1394 WARNING : L1394QARRAY > value is to big" << endl;
00162
00163 qarray[i/4].setByte(i%4, value);
00164 }
00165
00166 }