digitalmars.D - dragon prototype stl
- Joey Peters (134/134) Sep 09 2004 After working a while with D I've made myself a small little STL that do...
- Ant (4/5) Sep 09 2004 setup a project at http://www.dsource.org
After working a while with D I've made myself a small little STL that does some
pretty useful things (in my eyes anyway). For now, not all features have been
implemented yet, or are fully tested.
http://www.nidhogg.com/dragon.rar
Using arrays:
alias Array!(int) IntArray;
IntArray test = new IntArray;
test.push(10);
test.push(50);
test.front(2);
test.front(22);
test.front(84);
test.push(22);
test.front(84);
test.insert(2, 24);
void printInteger(int which) {
printf("-> %i\n", which);
}
printf(">> Printing all items\n");
test.call(&printInteger);
printf(">> Printing where 84\n");
test.where(84).call(&printInteger);
printf(">> Printing where 84, 84\n");
const int[2] tc = [84, 84];
test.where(tc).call(&printInteger);
printf(">> Doing a find.\n");
foreach(Position i; test.find(84)) {
printf("%i, %i\n", i.start, i.end);
}
printf(">> Doing a complex find.\n");
const int[] citms = [84, 84];
foreach(test.findItem i; test.find(citms)) {
printf("%i, %i -\n", i.start, i.end);
test.grab(i).fill(10);
}
printf(">> Now it is: \n");
test.call(&printInteger);
printf(">> Slicing 22\n");
test.slice(test.find(22));
test.call(&printInteger);
printf(">> Putting 99 where once was ten, but as slice\n");
// complex version of replace
test.squeeze(99, test.slice(test.find(10))).call(&printInteger);
printf(">> Putting 666 twice for each 99\n");
const int[] t_ = [666, 666];
// again a complex version
test.squeeze(t_, test.slice(test.find(99))).call(&printInteger);
printf(">> Making replacing 666 with 500\n");
test.replace(666, 200).call(&printInteger);
printf(">> Replacing 200, 200 with 1\n");
const int[] t__ = [200, 200];
test.replace(t__, 1).call(&printInteger);
test.push(1);
test.push(1);
printf(">> Turning 1, 1 in 2, 2\n");
const int[] _1_ = [1, 1];
const int[] _2_ = [2, 2];
test.replace(_1_, _2_).call(&printInteger);
They work the same for strings:
String str = new String("Hello world");
printf(">> Print string\n");
// ~str returns array as [] type, or .getString
printf(~str ~ "\n");
printf(">> Replace o to e\n");
str.replace('o', 'e');
printf(~str ~ "\n");
printf(">> Replace Helle to Hallo\n");
str.replace(r"Helle", r"Hallo");
printf(~str ~ "\n");
And finally a pretty new thing, spawns:
class Foo : Spawn {
char[] name;
this(char[] n) {
name = n;
}
this() {}
void bar() {
printf("My name is %.*s\n", name);
}
}
..
// first make a few of them
new Foo("Apple");
new Foo("Peach");
new Foo("Orange");
Foo p = new Foo("Pear");
new Foo("Mellon");
new Foo("Banana");
new Foo("Prume");
printf(">> Print them all.\n");
// then make them all call bar
void manualCall(Foo which) {
which.bar();
}
Foo.select.as!(Foo).all().call(&manualCall);
printf(">> Print them by 'P'\n");
bit startP(Foo which) {
return which.name[0] == 'P';
}
Foo.select.as!(Foo).by(&startP).call(&manualCall);
printf(">> Delete Pear and do it again\n");
delete p;
Foo.select.as!(Foo).by(&startP).call(&manualCall);
printf(">> Delete them from starting with P and then show all\n");
Foo.select.as!(Foo).by(&startP).del();
Foo.select.as!(Foo).all().call(&manualCall);
.. etc
Another small thing it can do is convert bases
import base;
base.use(); // makes hex bin and dec
base.hex(255) -> "FF";
bsae.bin(255) -> 11111111
base.hex("FF") -> 255
Base!(radix) custom = new Base!(radix)("0123456789etc");
Things for 0.2 or higher:
- More array functionality
- String formatting overloading () and %, () for sequences and % for
dictionaries:
String a = new String("Hello %s");
a("world",...).getString() -> Hello world
String a = new String("Hello %(item)s");
Dictionary b = new Dictionary;
b["item"] = new String("world");
(a % b).getString()
- Bodies (another new concept)
- Books (lists with (variable?) delegates/functions)
- Dictionaries (hashes with objects as hashes with a base class 'item')
- Variants (automatically type things, and remember the type)
- Math functions
- Custom binary streams (saving objects to files, for example hashed, pure
binary (no size checking), xml, etc)
- Sorting functions and other common algorithms
- Improve selector classes (ie: by can take a static member function)
Suggestions/bugs, anyone?
Sep 09 2004
In article <chpp8p$28uv$1 digitaldaemon.com>, Joey Peters says...Suggestions/bugs, anyone?setup a project at http://www.dsource.org and if it is open source also at http://sourceforge.net Ant
Sep 09 2004








Ant <Ant_member pathlink.com>