digitalmars.D - Linked errors with templates in several modules
- Sukit Tretriluxana (252/252) Jun 25 2004 Seems like the system has problems with attachment. If you cannot downlo...
Seems like the system has problems with attachment. If you cannot download the attachment, here is the code in each file + the make file. ==================================== IteratorModule.d ==================================== public interface Iterator(ValueType) { public bool hasNext(); public ValueType next(); } ==================================== CollectionModule.d ==================================== import IteratorModule; public interface Collection(ValueType) { public bool add(ValueType val); public bool addAll(.Collection!(ValueType) col); public void clear(); public bool contains(ValueType val); public bool containsAll(.Collection!(ValueType) col); public bool isEmpty(); public Iterator!(ValueType) iterator(); public bool remove(ValueType val); public bool removeAll(.Collection!(ValueType) col); public bool retainAll(.Collection!(ValueType) col); public int size(); public ValueType[] toArray(); public void toArray(ValueType[] array); } ==================================== ListModule.d ==================================== import CollectionModule; public interface List(ValueType) : Collection!(ValueType) { public void addAt(int index, ValueType val); public void addAllAt(int index, Collection!(ValueType) col); public ValueType get(int index); public int indexOf(ValueType val); public int lasIndexOf(ValueType val); public ValueType removeAt(int index); public ValueType set(int index, ValueType val); public .List!(ValueType) subList(int fromIndex, int toIndex); } ==================================== ArrayListModule.d ==================================== import ListModule; import IteratorModule; public class ArrayList(ValueType) : List!(ValueType) { private int curSize; private ValueType[] values; private int incExpcurSize; public this() { this(100, 100); } public this(int initCapacity) { this(initCapacity, 100); } public this(int initCapacity, int incExpcurSize) { curSize = 0; values.length = initCapacity; incExpcurSize = incExpcurSize; } public bool add(ValueType val) { ensurecurSize(curSize + 1); values[curSize++] = val; return true; } public void addAt(int index, ValueType val) { ensurecurSize(curSize + 1); shiftRight(index, 1); values[index] = val; } public bool addAll(Collection!(ValueType) col) { Iterator!(ValueType) itor = col.iterator(); while(itor.hasNext()) { add(itor.next()); } return true; } public void addAllAt(int index, Collection!(ValueType) col) { ensurecurSize(curSize + col.size); shiftRight(index, col.size); Iterator!(ValueType) itor = col.iterator(); for(int i = index; itor.hasNext(); ++i) { values[i] = itor.next(); } } public void clear() { curSize = 0; } public bool contains(ValueType val) { return indexOf(val) != -1; } public bool containsAll(Collection!(ValueType) col) { Iterator!(ValueType) itor = col.iterator(); while(itor.hasNext()) { if(!contains(itor.next())) { return false; } } return true; } public bool isEmpty() { return curSize == 0; } public Iterator!(ValueType) iterator() { return new ArrayListIterator!(ValueType)(curSize, values); // return new ArrayListIterator!(ValueType)(curSize, curSize); } public ValueType get(int index) { return values[index]; } public int indexOf(ValueType val) { for(int i = 0; i < curSize; ++i) { if(values[i] == val) { return i; } } return -1; } public int lasIndexOf(ValueType val) { for(int i = curSize - 1; i >= 0; --i) { if(values[i] == val) { return i; } } return -1; } public ValueType set(int index, ValueType val) { ValueType oldval = values[index]; values[index] = val; return oldval; } public int size() { return curSize; } public List!(ValueType) subList(int fromIndex, int toIndex) { int count = toIndex - fromIndex; ArrayList!(ValueType) subl = new .ArrayList!(ValueType)(count); subl.values[] = this.values[fromIndex..toIndex]; return subl; } public bool remove(ValueType val) { int pos = indexOf(val); if(pos != -1) { shiftLeft(pos, 1); --curSize; return true; } return false; } public ValueType removeAt(int index) { ValueType oldval = values[index]; shiftLeft(index, 1); --curSize; return oldval; } public bool removeAll(Collection!(ValueType) col) { bool changed = false; Iterator!(ValueType) itor = col.iterator(); while(itor.hasNext()) { changed = remove(itor.next()) || changed; } return changed; } public bool retainAll(Collection!(ValueType) col) { bool changed = false; for(int index = 0; index < curSize; ) { if(col.contains(values[index])) { ++index; } else { removeAt(index); changed = true; } } return changed; } public ValueType[] toArray() { ValueType[] result = new ValueType[curSize]; result[] = values; return result; } public void toArray(ValueType[] array) { array[] = values; } private void ensurecurSize(int reqcurSize) { if(reqcurSize > values.length) { int newcurSize = reqcurSize - curSize <= incExpcurSize ? incExpcurSize : reqcurSize + incExpcurSize; values.length = newcurSize; } } private void shiftLeft(int startIndex, int offset) { for(int index = startIndex; index < curSize; --index) { values[index - offset] = values[index]; } } private void shiftRight(int startIndex, int offset) { for(int index = curSize - 1; index < startIndex; --index) { values[index + offset] = values[index]; } } } public class ArrayListIterator(ValueType) : Iterator!(ValueType) { private int curSize, index; private ValueType[] data; public this(int curSize, ValueType[] data) { // public this(int curSize, int data) { this.curSize = curSize; this.data = data; // this.curSize = data; index = 0; } public bool hasNext() { return index < curSize; } public ValueType next() { return data[index++]; } } ==================================== test.d ==================================== import ArrayListModule; void main() { ArrayList!(int) iarray = new ArrayList!(int)(); } ==================================== Makefile ==================================== DMD = dmd SRCS = \ IteratorModule.d \ CollectionModule.d \ ListModule.d \ ArrayListModule.d OBJS = $(SRCS:.d=.obj) TEST_SRCS = test.d TEST_OBJS = $(TEST_SRCS:.d=.obj) LIB = stl.lib TEST = test.exe all: $(SRCS) $(LIB) clean: rm $(OBJS) $(TEST_OBJS) $(LIB) $(TEST) *.exe *.map $(LIB): $(OBJS) lib -c -n $ $(OBJS) %.obj: %.d $(DMD) $< -of$ -c $(DMD_FLAGS) unittest: $(SRCS) $(LIB) $(TEST) $(TEST): $(OBJS) $(TEST_OBJS) $(DMD) $(TEST_SRCS) -of$ $(OBJS) $(DMD_FLAGS)
Jun 25 2004