Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- struct S(T) {
- T[] data;
- int opApply(int delegate (T*) dg) {
- for(size_t i = 0; i < data.length; i++) {
- int result = dg(&data[i]);
- if(result != 0)
- return result;
- }
- return 0;
- }
- int opApply(int delegate (const T*) dg) const {
- for(size_t i = 0; i < data.length; i++) {
- int result = dg(&data[i]);
- if(result != 0)
- return result;
- }
- return 0;
- }
- int opApply(int delegate (size_t, T*) dg) {
- for(size_t i = 0; i < data.length; i++) {
- int result = dg(i, &data[i]);
- if(result != 0)
- return result;
- }
- return 0;
- }
- int opApply(int delegate (size_t, const T*) dg) const {
- for(size_t i = 0; i < data.length; i++) {
- int result = dg(i, &data[i]);
- if(result != 0)
- return result;
- }
- return 0;
- }
- }
- void main() {
- auto s1 = S!int([0, 1, 2, 3]);
- auto s2 = const S!int([0, 1, 2, 3]);
- import std.stdio : writeln, writefln;
- writeln("S!int, 1 arg:");
- foreach(s; s1)
- (*s)++;
- writeln("S!int, 2 args:");
- foreach(i, s; s1)
- writefln("%s: %s", i, *s);
- writeln("const S!int, 1 arg:");
- foreach(s; s2)
- writeln(*s);
- writeln("const S!int, 2 args:");
- foreach(i, s; s2)
- writefln("%s: %s", i, *s);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement