20#ifndef _TNMVEC_H_INCLUDED_
21#define _TNMVEC_H_INCLUDED_
52template<
class T>
class nmvec
61 nmvec(
void* Data,
int Size,
int Border=0):m_data((T*)Data),size(Size),m_container(0),m_border(Border)
66 nmvec(
int Size,
int Border=0):size(Size),m_border(Border)
68 m_container=
new T[size+2*m_border];
69 m_data=m_container+m_border;
75 nmvec(
const nmvec<T> &
vec)
78 m_border=
vec.m_border;
79 m_container=
new T[size+2*m_border];
80 m_data=m_container+m_border;
81 memcpy(m_data,
vec.m_data,size*
sizeof(T));
98 inline nmvec<T>& operator= (
const nmvec<T>&
vec)
100 ASSERTE(
vec.size==size);
101 memcpy(m_data,
vec.m_data,size*
sizeof(T));
106 inline nmint<T>& operator [] (
int idx)
108 ASSERTE(idx>=-m_border);
109 ASSERTE(idx<size+m_border);
110 nmint<T>* res=(nmint<T>*)(m_data+idx);
114 template <
class T2> nmvec<T2>& operator*= (
const nmint<T2> val)
116 for(
int idx=0;idx<size;idx++)
117 m_data[idx]*=val.m_value;
123 template <
class T2> nmvec<T2> operator* (
const nmint<T2>& val)
const
126 for(
int idx=0;idx<size;idx++)
127 res.m_data[idx]=m_data[idx]*val.m_value;
130 template <
class T2> nmint<T2> operator* (
const nmvec<T2>&
vec)
const
132 ASSERTE(size==
vec.size);
134 for (
int idx=0;idx<size;idx++)
135 res.m_value+=m_data[idx]*
vec.m_data[idx];
141 nmvec<T>& operator+= (
const nmint<T> &val)
143 for(
int idx=0;idx<size;idx++)
144 m_data[idx]+=val.m_value;
148 nmvec<T>& operator+= (
const nmvec<T> &
vec)
150 ASSERTE (
vec.size==size);
151 for(
int idx=0;idx<size;idx++)
152 m_data[idx]+=
vec.m_data[idx];
158 nmvec<T> operator+ (
const nmint<T>& val)
const
165 nmvec<T> operator+ (
const nmvec<T>&
vec)
const
167 ASSERTE (
vec.size==size);
174 nmvec<T>& operator-= (
const nmint<T> &val)
176 for(
int idx=0;idx<size;idx++)
177 m_data[idx]-=val.m_value;
181 nmvec<T>& operator-= (
const nmvec<T> &
vec)
183 ASSERTE (
vec.size==size);
184 for(
int idx=0;idx<size;idx++)
185 m_data[idx]-=
vec.m_data[idx];
191 nmvec<T> operator- ()
const
194 for(
int idx=0;idx<size;idx++)
195 m_data[idx]=-m_data[idx];
199 nmvec<T> operator- (
const nmint<T>& val)
const
207 nmvec<T> operator- (
const nmvec<T>&
vec)
const
209 ASSERTE (
vec.size==size);
210 nmvec <T> res(*
this);
218 nmvec<T>& operator/=(
const nmint<T> val)
220 ASSERTE(val.m_value!=0);
221 for(
int idx=0;idx<size;idx++)
222 m_data[idx]/=val.m_value;
227 nmvec<T> operator/ (
const T val)
const
235 nmvec<T>& operator>>=(
const int shr)
240 for(
int idx=0;idx<size;idx++)
245 nmvec<T> operator>> (
const int shr)
const
253 nmvec<T>& operator<<=(
const int shl)
258 for(
int idx=0;idx<size;idx++)
271 nmvec<T>& operator|= (
const nmint<T> &val)
273 for(
int idx=0;idx<size;idx++)
278 nmvec<T>& operator|= (
const nmvec<T> &
vec)
280 ASSERTE (
vec.size==size);
281 for(
int idx=0;idx<size;idx++)
282 m_data[idx]|=
vec.m_data[idx];
287 nmvec<T> operator| (
const nmint<T>& val)
const
289 nmvec <T> res(*
this);
294 nmvec<T> operator| (
const nmvec<T>&
vec)
const
296 ASSERTE (
vec.size==size);
297 nmvec <T> res(*
this);
303 nmvec<T>& operator&= (
const nmint<T> &val)
305 for(
int idx=0;idx<size;idx++)
310 nmvec<T>& operator&= (
const nmvec<T> &
vec)
312 ASSERTE (
vec.size==size);
313 for(
int idx=0;idx<size;idx++)
314 m_data[idx]&=
vec.m_data[idx];
318 nmvec<T> operator& (
const nmint<T>& val)
const
320 nmvec <T> res(*
this);
325 nmvec<T> operator& (
const nmvec<T>&
vec)
const
327 ASSERTE (
vec.size==size);
328 nmvec <T> res(*
this);
334 nmvec<T>& operator^= (
const nmint<T> &val)
336 for(
int idx=0;idx<size;idx++)
341 nmvec<T>& operator^= (
const nmvec<T> &
vec)
343 ASSERTE (
vec.size==size);
344 for(
int idx=0;idx<size;idx++)
345 m_data[idx]^=
vec.m_data[idx];
350 nmvec<T> operator^ (
const nmint<T>& val)
const
352 nmvec <T> res(*
this);
357 nmvec<T> operator^ (
const nmvec<T>&
vec)
const
359 nmvec <T> res(*
this);
365 nmvec<T>& operator~ ()
const
368 for(
int idx=0;idx<size;idx++)
369 res.m_data[idx]=~m_data[idx];
374 bool operator== (
const nmvec<T>&
vec)
const
376 ASSERTE (
vec.size==size);
377 for(
int idx=0;idx<size;idx++)
378 if (m_data[idx]!=
vec.m_data[idx])
384 bool operator!= (
const nmvec<T>&
vec)
const
386 ASSERTE (
vec.size==size);
387 for(
int idx=0;idx<size;idx++)
388 if (m_data[idx]==
vec.m_data[idx])
404 void set(
const T& val)
406 nmppsSet_(m_data,val,size);
411 memset(m_container,0,(size+2*m_border)*
sizeof(T));
419typedef nmvec<unsigned char>
nmvec8u;
422typedef nmvec<unsigned short>
nmvec16u;
425typedef nmvec<int> nmvec32s;
426typedef nmvec<long long> nmvec64s;
428typedef nmvec<unsigned int> nmvec32u;
429typedef nmvec<unsigned long long> nmvec64u;
Definition: tnmvecpack.h:138
__INLINE__ ostream & operator<<(ostream &s, mtr< unsigned char > &mtr)
Definition: nmtlio.h:64