Changeset 160 for trunk/meta/demo
- Timestamp:
- 03/09/06 08:25:20 (3 years ago)
- Files:
-
- trunk/meta/demo/calcpi.d (modified) (2 diffs)
- trunk/meta/demo/tabledemo.d (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/meta/demo/calcpi.d
r115 r160 7 7 import meta.math; 8 8 import meta.conv; 9 10 import std.math;11 9 12 10 /** real evaluateSeries!(real x, real metafunction!(real y, int n) term) … … 26 24 const real evaluateSeries = sumsofar; 27 25 } else { 28 const real evaluateSeries = .evaluateSeries!(x, term, n+1, sumsofar + term!(x, n));26 const real evaluateSeries = evaluateSeries!(x, term, n+1, sumsofar + term!(x, n)); 29 27 } 30 28 } trunk/meta/demo/tabledemo.d
r126 r160 3 3 // Create a constant array of long or ulong-sized items. Needs to be cast back to 4 4 // long[] or ulong[]. 5 template generateArray (alias entry, int n)5 template generateArrayAsChar(alias entry, int n) 6 6 { 7 7 static if ( entry!(0).sizeof == dchar.sizeof) { 8 8 // int or uint sized items 9 9 static if (n==0) { 10 const dchar [] generateArray = ""d ~ cast(dchar)entry!(n);10 const dchar [] generateArrayAsChar = ""d ~ cast(dchar)entry!(n); 11 11 } else { 12 const dchar[] generateArray = generateArray!(entry, n-1) ~ cast(dchar)entry!(n);12 const dchar[] generateArrayAsChar = generateArrayAsChar!(entry, n-1) ~ cast(dchar)entry!(n); 13 13 } 14 14 } else static if ( entry!(0).sizeof == 2*dchar.sizeof) { 15 15 // long or ulong sized items 16 16 static if (n==0) { 17 const dchar [] generateArray = ""d17 const dchar [] generateArrayAsChar = ""d 18 18 ~ cast(dchar)entry!(n) ~ cast(dchar)(entry!(n)>>>32); 19 19 } else { 20 const dchar[] generateArray = generateArray!(entry, n-1)20 const dchar[] generateArrayAsChar = generateArrayAsChar!(entry, n-1) 21 21 ~ cast(dchar)entry!(n) ~ cast(dchar)(entry!(n)>>32); 22 22 } … … 24 24 } 25 25 26 template generateArray(alias entry, int n) 27 { 28 const typeof(entry!(0)) [] generateArray = cast(typeof(entry!(0)) [])generateArrayAsChar!(entry, n); 29 } 30 31 // The ubiquitous factorial function 32 // 26 33 // Returns correct value for n=0 (factorial!(0)=1). 27 34 template factorial(int n) 28 35 { 29 static if (n<2) const u longfactorial = 1;30 else const u long factorial = n * .factorial!(n-1);36 static if (n<2) const uint factorial = 1; 37 else const uint factorial = n * factorial!(n-1); 31 38 } 32 39 40 // Make an array of all the factorials from 0 to 13 (14!> ulong.max) 41 const smallfactorials = generateArray!(factorial, 13); 33 42 43 44 /+ 34 45 // Make an array of all the factorials from 0 to 20 (21!> ulong.max) 35 46 const ulong [] smallfactorials; 36 37 47 static this() 38 48 { 39 smallfactorials = cast(u long []) generateArray!(factorial, 20);49 smallfactorials = cast(uint []) generateArrayAsChar!(factorial, 20); 40 50 } 41 51 +/ 42 52 import std.stdio; 43 53 44 intmain()54 void main() 45 55 { 46 56 for (int i=0; i<smallfactorials.length; ++i) { 47 57 writefln(i, " ", smallfactorials[i]); 48 58 } 49 return 0;50 59 } 51 52 /+53 // ---------- array literals version -----------54 55 template generateArray(alias entry, int n)56 {57 static if (n==0) {58 const typeof(entry!(0)) [] generateArray = [ entry!(n) ];59 } else {60 const typeof(entry!(0)) [] generateArray = generateArray!(entry, n-1) ~ [ entry!(n) ];61 }62 }63 64 const smallfactorials = generateArray!(factorial, 20);65 +/
