aboutsummaryrefslogtreecommitdiff
path: root/project/QBarInterpreter/src/com/modulus/qbar/lang/QBArrayList.java
blob: c7ef64acd0c577ee17c4536b1fd1612d8047d307 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
package com.modulus.qbar.lang;

import java.util.ArrayList;
import java.util.List;

import com.modulus.qbar.core.QBFunction;
import com.modulus.qbar.core.QBObject;
import com.modulus.qbar.core.QBStruct;

public class QBArrayList extends QBList{
	private List<QBObject> values = new ArrayList<QBObject>();
	
	public final static QBStruct arrayListStruct = new QBStruct("ArrayList");
	public static final QBFunction APPEND = new QBFunction(2) {
		
		@Override
		public QBObject execute(QBObject[] args) {
			QBArrayList lst = (QBArrayList)args[1];
			
			return lst.append(args[0]);
		}
	};
	
	static{
		arrayListStruct.addSuperStruct(QBList.list);
		arrayListStruct.set("++", APPEND);
	}
	
	
	public QBArrayList(QBObject[] objs){
		super(arrayListStruct);
		for( QBObject obj : objs )
			values.add(obj);
	}
	
	public QBArrayList(QBObject[] objs, QBStruct struct){
		super(struct);
		for( QBObject obj : objs )
			values.add(obj);
	}
	
	public QBArrayList() {
		this( new QBObject[]{} );
	}

	public void insert(int index, QBObject element) {
		values.add(index, element);
	}

	public QBObject add(QBObject e) {
		values.add(e);
		return this;
	}

	public void remove(QBObject arg0) {
		values.remove(arg0);
	}
	
	public QBObject get(int idx){
		if(idx < 0)
			return values.get(values.size()+idx);
		
		return values.get(idx);
	}

	public double size() {
		return values.size();
	}

	public QBArrayList append(QBObject obj){
		QBArrayList ret = new QBArrayList(new QBObject[]{});
		
		ret.values.addAll(this.values);
		
		if(obj instanceof QBArrayList)
			ret.values.addAll(((QBArrayList) obj).values);
		
		return ret;
	}
	
	public String toString(){
		return values.toString();
	}
	
	public Object getWrapped(){
		return values;
	}

	@Override
	public QBList realSubList(int off, int len) {
		QBArrayList ret = new QBArrayList();
		
		for( int i = off, a = 0; a < len;i ++, a ++)
			ret.add( this.get(i) );
		
		return ret;
	}
}