aboutsummaryrefslogtreecommitdiff
path: root/project/QBarInterpreter/src/com/modulus/qbar/lang/QBFunctionList.java
blob: 1af40ca97eadd6f58d5931c27e1ada44ca7861a6 (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
package com.modulus.qbar.lang;

import java.util.HashMap;
import java.util.Map;

import com.modulus.qbar.core.QBFunction;
import com.modulus.qbar.core.QBObject;
import com.modulus.qbar.core.primitive.QBInt;

public class QBFunctionList extends QBList{
	private static final long serialVersionUID = -6236925720933913879L;
	private Map<Integer, QBObject> listPart = new HashMap<Integer, QBObject>();
	private QBFunction func;
	
	public QBFunctionList(QBFunction func){
		this.func = func;
	}
	
	@Override
	public QBObject add(QBObject obj) {
		return this;
	}

	@Override
	public void remove(QBObject obj) {
		
	}

	@Override
	public QBObject get(int idx) {
		QBObject tmp = listPart.get(idx);
		
		if(tmp == null)
			listPart.put(idx, tmp = func.execute(new QBObject[]{new QBInt(idx), this}));
		
		return tmp;
	}

	@Override
	public double size() {
		return Double.POSITIVE_INFINITY;
	}

	@Override
	public void insert(int idx, QBObject obj) {
		listPart.put(idx, obj);
	}

	@Override
	public QBList realSubList(int off, int len) {
		throw new RuntimeException("Sub-list type not supported for FunctionList.");
	}
	
}