VList: Difference between revisions

Line 933:
{{trans|Kotlin}}
 
<lang objeck>class vList<T:Stringify> {
Will refactor to use generic types.
@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 : StringT) ~ vList<T> {
if(@base = Nil) {
return vList->New(vSeg->New(a)<T>)<T>;
}
else if(@offset = 0) {
l2 := @base->GetEle()->Size() * 2;
ele := StringT->New[l2];
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) ~ StringT {
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 : StringT[];
 
New(next : vSeg<T>, ele : StringT[]) {
@next := next;
@ele := ele;
}
 
New(s : StringT) {
@ele := StringT->New[1];
@ele[0] := s;
}
 
method : public : GetNext() ~ vSeg<T> {
return @next;
}
 
method : public : GetEle() ~ StringT[] {
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();
760

edits