00001 template <class ArrayType> 00002 struct Arithmetic 00003 { 00004 enum { Dims = ArrayType::Dims }; 00005 00006 typedef typename ArrayType::value_type value_type; 00007 00008 static RefPtr<MemArrayBase<Dims> > create(const RefPtr<MemArrayBase<Dims> > &MB, double f) 00009 { 00010 typedef value_type result_t; 00011 typedef MemArray<Dims, result_t> ResultArray_t; 00012 00013 RefPtr<TypedCreativeIterator<value_type> > TI = MB->getIterator(); 00014 00015 RefPtr<ResultArray_t> RA = new ResultArray_t( MB -> Size() ); 00016 00017 RefPtr<TypedCreativeIterator<result_t> > RI = RA->getIterator(); 00018 00019 const value_type*src = TI->ptr(); 00020 result_t*dst = RI->ptr(); 00021 00022 for(index_t i=0; i<TI->count(); i++) 00023 { 00024 dst[i] = src[i] * f; 00025 } 00026 00027 return RA; 00028 } 00029 }; 00030