VList: Difference between revisions
→{{header|Objeck}}
Line 933:
{{trans|Kotlin}}
<lang objeck>class vList<T:Stringify> {▼
@base : vSeg<T>;▼
▲<lang objeck>class vList {
▲ @base : vSeg;
@offset : Int;
New() {}
New(base : vSeg<T>, offset : Int) {
@base := base;
@offset := offset;
}
New(base : vSeg<T>) {
@base := base;
}
method : public : GetBase() ~ vSeg<T> {
return @base;
}
Line 958 ⟶ 956:
}
method : public : Cons(a :
if(@base = Nil) {
return vList->New(vSeg->New(a)<T>)<T>;
}
else if(@offset = 0) {
l2 := @base->GetEle()->Size() * 2;
ele :=
ele[l2 - 1] := a;
return vList->New(vSeg->New(@base, ele)<T>, l2 - 1)<T>;
}
else {
Line 976 ⟶ 974:
}
method : public : Cdr() ~ vList<T> {
if(@base = Nil) {
return Nil;
Line 986 ⟶ 984:
}
else {
return vList->New(@base->GetNext(), 0)<T>;
};
}
method : public : Index(i : Int) ~
if(i >= 0) {
i += @offset;
Line 1,021 ⟶ 1,019:
r := "[";
ele := @base->GetEle();
r += ele[@offset]->ToString();
r += ' ';
Line 1,030 ⟶ 1,028:
while(<>done) {
for(i := offset; i < ele->Size(); i += 1;) {
r += ele[i]->ToString();
r += ' ';
};
Line 1,074 ⟶ 1,072:
}
class vSeg<T:Stringify> {
@next : vSeg<T>;
@ele :
New(next : vSeg<T>, ele :
@next := next;
@ele := ele;
}
New(s :
@ele :=
@ele[0] := s;
}
method : public : GetNext() ~ vSeg<T> {
return @next;
}
method : public : GetEle() ~
return @ele;
}
Line 1,099 ⟶ 1,097:
class Test {
function : Main(args : String[]) ~ Nil {
v := vList->New()<String>;
"Zero value for type. empty vList: {$v}"->PrintLine();
v->PrintStructure();
for(a := '6'; a >= '1'; a -=1;) {
v := v->Cons("{$a}")<String>;
};
"Demonstrate cons. 6 elements added: {$v}"->PrintLine();
v->PrintStructure();
v := v->Cdr()<String>;
Runtime->Assert(v <> Nil);
"Demonstrate cdr. 1 element removed: {$v}"->PrintLine();
Line 1,121 ⟶ 1,120:
"Demonstrate element access. v[3] = {$e}"->PrintLine();
v := v->Cdr()<String>->Cdr()<String>;
Runtime->Assert(v <> Nil);
"Demonstrate cdr. 2 elements removed: {$v}"->PrintLine();
|