📄 offvec.hpp
字号:
/* Copyright (C) 2004 Caltech Written by Lexing Ying*/#ifndef _OFFVEC_HPP_#define _OFFVEC_HPP_#include "fdct_usfft_inc.hpp"using std::ostream;using std::istream;using std::ios_base;FDCT_USFFT_NS_BEGIN_NAMESPACE//-------------------------------------------------template <class F>class OffVec {public: int _m; int _s; //starting position, using negative F* _data;public: OffVec(int m=0, int s=0): _m(m), _s(s), _data(NULL) { assert(s<=0); if(_m>0) { _data = new F[_m]; assert( _data!=NULL ); memset(_data, 0, _m*sizeof(F)); } else _data=NULL; } OffVec(const OffVec& C): _m(C._m), _s(C._s) { if(_m>0) { _data = new F[_m]; assert( _data!=NULL ); memset(_data, 0, _m*sizeof(F)); } else _data=NULL; if(_m>0) { memcpy( _data, C._data, _m*sizeof(F) ); } } ~OffVec() { //cerr<<"m "<<_m<<endl; if(_m>0) { assert(_data!=NULL); delete[] _data; _data = NULL; } } OffVec& operator=(const OffVec& C) { if(_m>0) { delete[] _data; _data = NULL; } _m = C._m; _s = C._s; if(_m>0) { _data = new F[_m]; assert( _data!=NULL ); memset(_data, 0, _m*sizeof(F)); } else _data = NULL; if(_m>0) { memcpy( _data, C._data, _m*sizeof(F) ); } return *this; } void resize(int m, int s) { if(_m!=m) { if(_m>0) { delete[] _data; _data = NULL; } _m = m; _s = s; if(_m>0) { _data = new F[_m]; assert( _data!=NULL ); memset(_data, 0, _m*sizeof(F)); } else _data = NULL; } } const F& operator()(int i) const { assert( i>=_s && i<_m+_s); return _data[i-_s]; } F& operator()(int i) { assert( i>=_s && i<_m+_s); return _data[i-_s]; } int m() const { return _m; } int s() const { return _s; } F* data() const { return _data; }};/*//INPUTtemplate <class F> inline istream& operator>>(istream& is, OffVec<F>& vec){ int m; is>>m; vec.resize(m); for(int i=0; i<vec.m(); i++) is>>vec(i); return is;}*///OUTPUTtemplate <class F> inline ostream& operator<<(ostream& os, const OffVec<F>& vec){ os<<vec.m()<<" "<<vec.s()<<endl; for(int i=vec.s(); i<vec.s()+vec.m(); i++) os<<" "<<vec(i)<<endl; return os;}//SET VALUEtemplate <class F> inline void setvalue(OffVec<F>& vec, F val){ for(int i=vec.s(); i<vec.s()+vec.m(); i++) vec(i) = val;}//CLEARtemplate <class F> inline void clear(OffVec<F>& vec){ memset(vec.data(), 0, vec.m()*sizeof(F));}typedef OffVec<int> IntOffVec;typedef OffVec<double> DblOffVec;typedef OffVec<cpx> CpxOffVec;FDCT_USFFT_NS_END_NAMESPACE#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -