hsc3-db-0.12: sclang/Build.sc
+ Symbol {
toUpper {
^this.asString.toUpper.asSymbol;
}
}
+ Object {
findMethodR { |n|
/* ^this.class.findMethod(n); */
var m = this.findMethod(n);
var p = this.superclass;
if (m.notNil,{
^m;
},{
if (p.notNil,{
^p.findMethodR(n);
},{
^nil
});
});
}
supportsRate { |r|
^(this.class.findMethodR(r) != nil);
}
supportedRates {
^['ar','kr','dr','ir','new'].select({|r| this.supportsRate(r)});
}
inputNames { |r|
var n = this.class.findMethodR(r).argNames;
var x = ['this','mul','add','numChannels','numChans'];
^n.reject({|e| x.includes(e)});
}
inputDefault { |r,nm|
var m = this.class.findMethodR(r);
var n = m.argNames;
var i = n.detectIndex({|e| e == nm});
^m.prototypeFrame[i];
}
inputDefaults { |r|
var n = this.inputNames(r);
^n.collect({|e| e.inputDefault});
}
numberOfOutputs { |r|
var nc_i = this.numberOfChannelsInput;
if(nc_i==nil) {
var n = this.new.init.size;
if(n==0) {^['fixed',1]} {^['fixed',n]};
} {
^['variable',nc_i]
}
}
ugenDB {
var nm = this.name.asString;
var rr = this.supportedRates;
var rd = (audio: 'AR',control: 'KR',scalar: 'IR',demand: 'DR');
var dr = rd.at(this.new.rate);
var ft = this.isFilter.asArray;
var r = rr[0];
var n_a = this.inputNames(r);
var nc_i = this.numberOfChannelsInput;
//var n = if(nc_i==nil) {^n_a} {n_a.removeAt(nc_i);^n_a};
var n = n_a;
var ix_r = this.inputReordering;
var ix_f = {|ix| if (ix_r == nil) {ix} {ix_r[ix]}};
var i_e = this.enumerationInputs;
var nn = n.collect({|e,ix| [[ix,ix_f.value(ix)]
,e.asString
,this.inputDefault(r,e)
,i_e.at(ix)]});
var mi = this.flattensMCE;
var o = this.numberOfOutputs;
var h_m = SCDoc.documents.at("Classes/"++nm);
var h = if(h_m==nil) {"No summary"} {h_m.summary};
^[nm,rr,dr,ft,nn,mi,o,h]
}
ugenDBHaskell {
var db = this.ugenDB;
var nm = db[0].asCompileString;
var rr = db[1].reject({|e| e == 'new'}).collect({|e| e.toUpper});
var dr = db[2].asString;
var ft = if (db[3] == []) {
"Nothing"
} {
"(Just" + db[3].asString ++ ")"
};
var ii = db[4].collect({|e|
var ix = "(" ++ e[0][0].asString ++ "," ++ e[0][1].asString ++ ")";
var nm = e[1];
var df = if (e[2] == nil) {0.0} {e[2]};
var en = if (e[3] == nil) {
"Nothing"
} {
"(Just" + e[3].asString.asCompileString ++ ")"
};
"I" + ix + nm.asCompileString + "(" ++ df ++ ")" + en;
}).join(",");
var mi = if (db[5] == nil)
{"Nothing"}
{"(Just" + db[5].asString ++ ")"};
var o_b = ('fixed':'Left','variable':'Right').at(db[6][0]);
var o_n = db[6][1].asString;
var o = "(" ++ o_b + o_n ++ ")";
var h = db[7].asCompileString;
^"U" + nm + rr.asString + dr + ft + "[" + ii + "]" + mi + o + h;
}
}
+ Object {
allSubClassesOf {
var u = this.subclasses;
if(u.size == 0)
{^[]}
{^u ++ u.collect({|e| e.allSubClassesOf}).flatten}
}
}