Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members

l1394_qarray.cpp

Go to the documentation of this file.
00001 /***************************************************************************
00002                           l1394qarray.cpp  -  description
00003                              -------------------
00004     begin                : Mon Jun 26 2000
00005     copyright            : (C) 2000-2004 by Michael Repplinger
00006     email                : repplix@studcs.uni-sb.de
00007  ***************************************************************************/
00008 
00009 /***************************************************************************
00010  *                                                                         *
00011  *   This program is free software; you can redistribute it and/or modify  *
00012  *   it under the terms of the GNU General Public License as published by  *
00013  *   the Free Software Foundation; either version 2 of the License, or     *
00014  *   (at your option) any later version.                                   *
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 }

Generated on Wed Aug 24 00:36:40 2005 for L1394 by doxygen 1.4.2
L1394 library (NMM) grahics.cs.uni-sb.de/~repplix/l1394_home/