20#ifndef _TNMVECPACK_H_INCLUDED_
21#define _TNMVECPACK_H_INCLUDED_
42 nmppsPut_((T*)m_container,m_disp,n);
48 nmppsPut_((T*)m_container,m_disp,val);
52 operator int (
void)
const
56 n=nmppsGetVal_((T*)m_container,m_disp);
61 __INLINE__
int intdisp(
int indx);
62 __INLINE__
int bitdisp(
int indx);
148 nmvecpack(
void* Data,
int Size,
int Border=0):m_data((T*)Data),m_size(Size),m_container(0),m_border(Border){};
150 nmvecpack(
int Size,
int Border=0):m_size(Size),m_border(Border)
155 nmppsMalloc_64s((T**)&m_container,m_size+2*m_border);
157 m_data=first.m_container;
165 m_border=
vec.m_border;
169 nmppsMalloc_64s(&m_container,m_size+2*m_border);
170 m_data=nmppsAddr_(m_container,m_border);
171 nmppsCopy_(
vec.m_data,m_data,m_size);
179 nmppsFree(m_container);
185 _ASSERTE(
vec.m_size==m_size);
187 nmppsCopy_(
vec.m_data,m_data,m_size);
199 template <
class T2>
nmvecpack<T2>& operator*= (
const nmint<T2> val)
201 for(
int idx=0;idx<m_size;idx++)
202 m_data[idx]*=val.m_value;
208 template <
class T2>
nmvecpack<T2> operator* (
const nmint<T2>& val)
const
211 for(
int idx=0;idx<m_size;idx++)
212 res.m_data[idx]=m_data[idx]*val.m_value;
217 _ASSERTE(m_size==
vec.m_size);
219 for (
int idx=0;idx<m_size;idx++)
220 res.m_value+=m_data[idx]*
vec.m_data[idx];
228 for(
int idx=0;idx<m_size;idx++)
229 m_data[idx]+=val.m_value;
235 _ASSERTE (
vec.m_size==m_size);
236 for(
int idx=0;idx<m_size;idx++)
237 m_data[idx]+=
vec.m_data[idx];
252 _ASSERTE (
vec.m_size==m_size);
261 for(
int idx=0;idx<m_size;idx++)
262 m_data[idx]-=val.m_value;
268 _ASSERTE (
vec.m_size==m_size);
269 for(
int idx=0;idx<m_size;idx++)
270 m_data[idx]-=
vec.m_data[idx];
279 for(
int idx=0;idx<m_size;idx++)
280 m_data[idx]=-m_data[idx];
294 _ASSERTE (
vec.m_size==m_size);
295 nmvecpack <T> res(*
this);
305 _ASSERTE(val.m_value!=0);
306 for(
int idx=0;idx<m_size;idx++)
307 m_data[idx]/=val.m_value;
325 for(
int idx=0;idx<m_size;idx++)
343 for(
int idx=0;idx<m_size;idx++)
358 for(
int idx=0;idx<m_size;idx++)
365 _ASSERTE (
vec.m_size==m_size);
366 for(
int idx=0;idx<m_size;idx++)
367 m_data[idx]|=
vec.m_data[idx];
374 nmvecpack <T> res(*
this);
381 _ASSERTE (
vec.m_size==m_size);
382 nmvecpack <T> res(*
this);
390 for(
int idx=0;idx<m_size;idx++)
397 _ASSERTE (
vec.m_size==m_size);
398 for(
int idx=0;idx<m_size;idx++)
399 m_data[idx]&=
vec.m_data[idx];
405 nmvecpack <T> res(*
this);
412 _ASSERTE (
vec.m_size==m_size);
413 nmvecpack <T> res(*
this);
421 for(
int idx=0;idx<m_size;idx++)
428 _ASSERTE (
vec.m_size==m_size);
429 for(
int idx=0;idx<m_size;idx++)
430 m_data[idx]^=
vec.m_data[idx];
437 nmvecpack <T> res(*
this);
444 nmvecpack <T> res(*
this);
453 for(
int idx=0;idx<m_size;idx++)
454 res.m_data[idx]=~m_data[idx];
461 _ASSERTE (
vec.m_size==m_size);
462 for(
int idx=0;idx<m_size;idx++)
463 if (m_data[idx]!=
vec.m_data[idx])
471 _ASSERTE (
vec.m_size==m_size);
472 for(
int idx=0;idx<m_size;idx++)
473 if (m_data[idx]==
vec.m_data[idx])
478 template<
class T2>
void SetData(T2* Data)
480 for(
int i=0;i<m_size;i++)
484 template<
class T2>
void GetData(T2* Data)
486 for(
int i=0;i<m_size;i++)
487 Data[i]=(T2)m_data[i].value;
492 memset(m_container,0,(m_size+2*m_border)*
sizeof(T));
Definition: tnmvecpack.h:29
Definition: tnmvecpack.h:138