Diana Software
QVectorI.cc
Go to the documentation of this file.
1 #include "QVectorI.hh"
2 #include "QVector.hh"
3 #include "QError.hh"
4 #include <cmath>
5 #include <sstream>
6 
7 QObjectImp(Diana::QVectorI);
8 
10 
12 {
13  fSize = 0;
14  fData = 0;
15  fAllocSize = 0;
16 }
17 
18 QVectorI::QVectorI(const size_t size)
19 {
20  fSize = 0;
21  fData = 0;
22  fAllocSize = 0;
23  Resize(size);
24 }
25 
26 
28 {
29  fSize = 0;
30  fData = 0;
31  fAllocSize = 0;
32  this->operator=(orig);
33  this->QObject::operator=(orig);
34 }
35 
37 {
38  fSize = 0;
39  fData = 0;
40  fAllocSize = 0;
41  this->operator=(orig);
42 }
43 
44 QVectorI::QVectorI(const std::vector<int>& orig)
45 {
46  fSize = 0;
47  fData = 0;
48  fAllocSize = 0;
49  this->operator=(orig);
50 }
51 
52 QVectorI::QVectorI(const std::vector<double>& orig)
53 {
54  fSize = 0;
55  fData = 0;
56  fAllocSize = 0;
57  this->operator=(orig);
58 }
59 
61 {
62  if(fData) delete [] fData;
63  fSize = 0;
64  fAllocSize = 0;
65  fData = 0;
66 }
67 
68 void QVectorI::Resize(const size_t newSize)
69 {
70  if(fData && fSize < fAllocSize) {
71  fAllocSize = fSize;
72  /*
73  size_t* a = reinterpret_cast<size_t*>(fData) - 1;
74  size_t size = *a/sizeof(int)-4;
75  std::cout<<this<<":"<<fData<<" Size: "<<fSize<<" Alloc: "<<fAllocSize<<" Real: "<<size<<" New: "<<newSize;
76  if(fAllocSize > size) std::cout<<" AAAAAAA";
77  std::cout<<std::endl;
78  fAllocSize = size;
79  */
80  } else {
81  fAllocSize = 0;
82  }
83  if((int)newSize > fAllocSize) {
84  if(fData) delete [] fData;
85  fData = new int[newSize];
86  fAllocSize = newSize;
87  }
88  fSize = newSize;
89 
90 }
91 
93 {
94  Resize(orig.Size());
95  for(int i = 0; i < fSize; i++) fData[i] = orig[i];
96  this->QObject::operator=(orig);
97  return *this;
98 }
99 
101 {
102  Resize(orig.Size());
103  for(int i = 0; i < fSize; i++) fData[i] = lround(orig[i]);
104  return *this;
105 }
106 
107 const QVectorI& QVectorI::operator = (const std::vector<int>& orig){
108  Resize(orig.size());
109  for(int i=0;i<fSize;i++) fData[i] = orig[i];
110  return *this;
111 }
112 
113 const QVectorI& QVectorI::operator = (const std::vector<double>& orig){
114  Resize(orig.size());
115  for(int i=0;i<fSize;i++) fData[i] = lround(orig[i]);
116  return *this;
117 }
118 
119 void QVectorI::Initialize(int val) {
120  for(int i=0;i<fSize;i++) fData[i] = val;
121 }
122 
123 int & QVectorI::operator[](size_t i)
124 {
125  if(i < (size_t)fSize) return fData[i];
126 
127  std::stringstream stream;
128  stream<<"Size: "<<fSize<<" Index: "<<i;
129  DianaThrow( QError(QERR_OUT_OF_RANGE,__FILE__,__LINE__,stream.str()));
130  return fData[0];
131 }
132 
133 int QVectorI::operator[](size_t i) const
134 {
135  if(i < (size_t)fSize) return fData[i];
136 
137  std::stringstream stream;
138  stream<<"Size: "<<fSize<<" Index: "<<i;
139  DianaThrow( QError(QERR_OUT_OF_RANGE,__FILE__,__LINE__,stream.str()));
140  return Q_INT_DEFAULT;
141 }
142 
143 
144 
146 
147 
148 /********************************************
149  NON MEMBER FUNCTIONS
150 *********************************************/
151 
152 std::ostream& operator<<(std::ostream&s,const Diana::QVectorI &vec){
153  for (size_t i = 0; i < vec.Size(); i++) s<<vec[i]<<" ";
154  s<<std::endl;
155  return s;
156 }
157 
QVector vec(3)
#define DianaThrow(obj)
Definition: QDianaDebug.hh:26
#define Q_END_NAMESPACE
Definition: QDiana.hh:22
#define Q_BEGIN_NAMESPACE
Definition: QDiana.hh:20
#define Q_INT_DEFAULT
Definition: QDiana.hh:26
@ QERR_OUT_OF_RANGE
Definition: QError.hh:28
QObjectImp(Diana::QVectorI)
Q_END_NAMESPACE std::ostream & operator<<(std::ostream &s, const Diana::QVectorI &vec)
Definition: QVectorI.cc:152
error class with error type and description
Definition: QError.hh:115
QObject & operator=(const QObject &rhs)
operator=
Definition: QObject.cc:32
Interface for raw daq vectors in Diana.
Definition: QVectorI.hh:19
const QVectorI & operator=(const QVectorI &orig)
Definition: QVectorI.cc:92
void Resize(const size_t size)
Definition: QVectorI.cc:68
QVectorI()
Definition: QVectorI.cc:11
size_t Size() const
Definition: QVectorI.hh:45
Int_t * fData
array
Definition: QVectorI.hh:61
Int_t fSize
size of the array
Definition: QVectorI.hh:57
Int_t fAllocSize
Definition: QVectorI.hh:59
void Initialize(int val)
Definition: QVectorI.cc:119
~QVectorI()
Definition: QVectorI.cc:60
int & operator[](size_t i)
Definition: QVectorI.cc:123
Interface for vectors in Diana analysis.
Definition: QVector.hh:30
UInt_t Size() const
size of QVector
Definition: QVector.hh:54