[ create a new paste ] login | about

Link: http://codepad.org/LNIBIXvc    [ raw code | output | fork ]

D, pasted on Feb 26:
import std.stdio;
struct Array(T) {
    T* ptr;
    size_t length_;
    size_t length() {return length_;}
    void length(size_t l) {length_ = l; ptr = (new T[length_]).ptr;}
}

void func1(int[] ary) {
    ary.length = 100;
}

void func2(Array!(int) ary) {
    ary.length = 100;
}

void reffunc1(ref int[] ary) {
    ary.length = 1000;
}

void reffunc2(ref Array!(int) ary) {
    ary.length = 1000;
}

void main() {
    // 1. 動的配列の場合
    int[] ary1;
    ary1.length = 10;
    writefln("ary1.length == %d", ary1.length);
    func1(ary1);
    writefln("ary1.length == %d", ary1.length);
    reffunc1(ary1);
    writefln("ary1.length == %d", ary1.length);
    // 2. 構造体の場合
    Array!(int) ary2;
    ary2.length = 10;
    writefln("ary2.length == %d", ary2.length);
    func2(ary2);
    writefln("ary2.length == %d", ary2.length);
    reffunc2(ary2);
    writefln("ary2.length == %d", ary2.length);
}


Output:
1
2
3
4
5
6
ary1.length == 10
ary1.length == 10
ary1.length == 1000
ary2.length == 10
ary2.length == 10
ary2.length == 1000


Create a new paste based on this one


Comments: