6 // designed for lists of track numbers
18 TYPE
append(TYPE value
);
20 TYPE
insert(TYPE value
, int number
);
23 void allocate(int total
);
24 // remove last pointer from end
26 // remove last pointer and object from end
28 // remove pointer to object from list
29 void remove(TYPE value
);
30 // remove object and pointer to it from list
31 void remove_object(TYPE value
);
32 // remove object and pointer to it from list
33 void remove_object_number(int number
);
34 // remove pointer to item numbered
35 void remove_number(int number
);
36 // Return number of first object matching argument
37 int number_of(TYPE object
);
39 // Remove pointer and objects for each array entry
40 void remove_all_objects();
42 void set_array_delete();
55 ArrayList
<TYPE
>::ArrayList()
60 values
= new TYPE
[available
];
65 ArrayList
<TYPE
>::~ArrayList()
67 // Just remove the pointer
73 void ArrayList
<TYPE
>::set_array_delete()
80 void ArrayList
<TYPE
>::allocate(int total
)
85 TYPE
* newvalues
= new TYPE
[available
];
86 for(int i
= 0; i
< total
; i
++) newvalues
[i
] = values
[i
];
93 TYPE ArrayList
<TYPE
>::append(TYPE value
) // add to end of list
95 if(total
+ 1 > available
)
98 TYPE
* newvalues
= new TYPE
[available
];
99 for(int i
= 0; i
< total
; i
++) newvalues
[i
] = values
[i
];
104 values
[total
++] = value
;
109 TYPE ArrayList
<TYPE
>::append() // add to end of list
111 if(total
+ 1 > available
)
114 TYPE
* newvalues
= new TYPE
[available
];
115 for(int i
= 0; i
< total
; i
++) newvalues
[i
] = values
[i
];
121 return values
[total
- 1];
125 TYPE ArrayList
<TYPE
>::insert(TYPE value
, int number
)
128 for(int i
= total
- 1; i
> number
; i
--)
130 values
[i
] = values
[i
- 1];
132 values
[number
] = value
;
136 void ArrayList
<TYPE
>::remove(TYPE value
) // remove value from anywhere in list
140 for(in
= 0, out
= 0; in
< total
;)
142 if(values
[in
] != value
) values
[out
++] = values
[in
++];
152 TYPE ArrayList
<TYPE
>::last() // last element in list
154 return values
[total
- 1];
160 void ArrayList
<TYPE
>::remove_object(TYPE value
) // remove value from anywhere in list
170 void ArrayList
<TYPE
>::remove_object_number(int number
)
175 delete [] values
[number
];
177 delete values
[number
];
178 remove_number(number
);
181 fprintf(stderr
, "ArrayList<TYPE>::remove_object_number: number %d out of range %s.\n", number
, total
);
186 void ArrayList
<TYPE
>::remove_object() // remove value from anywhere in list
191 delete [] values
[total
- 1];
193 delete values
[total
- 1];
197 fprintf(stderr
, "ArrayList<TYPE>::remove_object: array is 0 length.\n");
203 void ArrayList
<TYPE
>::remove()
208 // remove pointer from anywhere in list
210 void ArrayList
<TYPE
>::remove_number(int number
)
213 for(in
= 0, out
= 0; in
< total
;)
216 values
[out
++] = values
[in
++];
218 // need to delete it here
225 void ArrayList
<TYPE
>::remove_all_objects()
227 //printf("ArrayList<TYPE>::remove_all_objects 1 %d\n", total);
228 for(int i
= 0; i
< total
; i
++)
239 void ArrayList
<TYPE
>::remove_all()
244 // sort from least to greatest value
246 void ArrayList
<TYPE
>::sort()
254 for(int i
= 0, j
= 1; j
< total
; i
++, j
++)
256 if(values
[j
] < values
[i
])
259 values
[i
] = values
[j
];
268 int ArrayList
<TYPE
>::number_of(TYPE object
)
270 for(int i
= 0; i
< total
; i
++)
272 if(values
[i
] == object
) return i
;