Reg :: Comment my Code
Sumit Adhikari
sumit.adhikari at gmail.com
Sat Nov 9 09:25:23 PST 2013
I am new in D Language. Following code is working fine. Still I
want you people to comment on issues of my code.
Every code is designed to accomplish some particular job -
consider my code is generic. I will be obliged if you may please
spend some time for my D learning.
===========================================
module filter ;
abstract class filter_base(Tinp,Tout,Tcof)
{
private :
static immutable enum {
FLOATING,
INTEGRAL,
UNKNOWN
};
Tcof[] fcoeffs ;
Tcof[] icoeffs ;
Tinp[] fir_delay ;
Tout[] iir_delay ;
static if (__traits(isFloating, Tinp)) static immutable
int itype = FLOATING ;
else static if (__traits(isIntegral, Tinp)) static immutable
int itype = INTEGRAL ;
else static immutable
int itype = UNKNOWN ;
static if (__traits(isFloating, Tout)) static immutable
int otype = FLOATING ;
else static if (__traits(isIntegral, Tout)) static immutable
int otype = INTEGRAL ;
else static immutable
int otype = UNKNOWN ;
static if (__traits(isFloating, Tcof)) static immutable
int ctype = FLOATING ;
else static if (__traits(isIntegral, Tcof)) static immutable
int ctype = INTEGRAL ;
else static immutable
int ctype = UNKNOWN ;
public :
this(immutable Tcof[] fcoeffs_) {
if ( (itype == UNKNOWN) | (otype == UNKNOWN) |(ctype ==
UNKNOWN) ){
throw new Exception(" FATAL :: Template type trait
exception for filter_base");
}
assert(fcoeffs_.length > 0);
fcoeffs = fcoeffs_ ;
fir_delay.length = fcoeffs.length - 1 ;
}
this(immutable Tcof[] fcoeffs_, immutable Tcof[] icoeffs_){
if ( (itype == UNKNOWN) | (otype == UNKNOWN) | (ctype ==
UNKNOWN) ){
throw new Exception(" FATAL :: Template type trait
exception for filter_base");
}
assert(fcoeffs_.length > 0);
fcoeffs = fcoeffs_ ;
fir_delay.length = fcoeffs.length - 1 ;
assert(icoeffs_.length > 0);
icoeffs = icoeffs_ ;
iir_delay.length = icoeffs.length - 1 ;
}
~this(){}
} ;
class fir(Tinp,Tout,Tcof) : filter_base!(Tinp,Tout,Tcof)
{
this(immutable Tcof[] fcoeffs_) {
super(fcoeffs_);
}
~this(){}
Tout read(immutable Tinp inp_){
synchronized {
Tout fir_out = fcoeffs[0] * inp_;
for (uint i = 0 ; i < cast(uint)(fcoeffs.length - 1);
++i) fir_out += fcoeffs[i+1]*fir_delay[i] ;
for (uint i = cast(uint)(fcoeffs.length - 2) ; i > 0 ;
--i) fir_delay[i] = fir_delay[i-1];
fir_delay[0] = inp_ ;
return (fir_out);
}
}
};
==============================================
Regards, Sumit
More information about the Digitalmars-d
mailing list