4 // designed for lists of track numbers
13 TYPE
append(TYPE value
);
15 TYPE
insert(TYPE value
, int number
);
18 void allocate(int total
);
19 // remove last pointer from end
21 // remove last pointer and object from end
23 // remove pointer to object from list
24 void remove(TYPE value
);
25 // remove object and pointer to it from list
26 void remove_object(TYPE value
);
27 // remove object and pointer to it from list
28 void remove_object_number(int number
);
29 // remove pointer to item numbered
30 void remove_number(int number
);
31 // Return number of first object matching argument
32 int number_of(TYPE object
);
34 // Remove pointer and objects for each array entry
35 void remove_all_objects();
37 void set_array_delete();
50 ArrayList
<TYPE
>::ArrayList()
55 values
= new TYPE
[available
];
60 ArrayList
<TYPE
>::~ArrayList()
62 // Just remove the pointer
68 void ArrayList
<TYPE
>::set_array_delete()
75 void ArrayList
<TYPE
>::allocate(int total
)
80 TYPE
* newvalues
= new TYPE
[available
];
81 for(int i
= 0; i
< total
; i
++) newvalues
[i
] = values
[i
];
88 TYPE ArrayList
<TYPE
>::append(TYPE value
) // add to end of list
90 if(total
+ 1 > available
)
93 TYPE
* newvalues
= new TYPE
[available
];
94 for(int i
= 0; i
< total
; i
++) newvalues
[i
] = values
[i
];
99 values
[total
++] = value
;
104 TYPE ArrayList
<TYPE
>::append() // add to end of list
106 if(total
+ 1 > available
)
109 TYPE
* newvalues
= new TYPE
[available
];
110 for(int i
= 0; i
< total
; i
++) newvalues
[i
] = values
[i
];
116 return values
[total
- 1];
120 TYPE ArrayList
<TYPE
>::insert(TYPE value
, int number
)
123 for(int i
= total
- 1; i
> number
; i
--)
125 values
[i
] = values
[i
- 1];
127 values
[number
] = value
;
131 void ArrayList
<TYPE
>::remove(TYPE value
) // remove value from anywhere in list
135 for(in
= 0, out
= 0; in
< total
;)
137 if(values
[in
] != value
) values
[out
++] = values
[in
++];
147 TYPE ArrayList
<TYPE
>::last() // last element in list
149 return values
[total
- 1];
155 void ArrayList
<TYPE
>::remove_object(TYPE value
) // remove value from anywhere in list
165 void ArrayList
<TYPE
>::remove_object_number(int number
)
170 delete [] values
[number
];
172 delete values
[number
];
173 remove_number(number
);
176 fprintf(stderr
, "ArrayList<TYPE>::remove_object_number: number %d out of range %s.\n", number
, total
);
181 void ArrayList
<TYPE
>::remove_object() // remove value from anywhere in list
186 delete [] values
[total
- 1];
188 delete values
[total
- 1];
192 fprintf(stderr
, "ArrayList<TYPE>::remove_object: array is 0 length.\n");
198 void ArrayList
<TYPE
>::remove()
203 // remove pointer from anywhere in list
205 void ArrayList
<TYPE
>::remove_number(int number
)
208 for(in
= 0, out
= 0; in
< total
;)
211 values
[out
++] = values
[in
++];
213 // need to delete it here
220 void ArrayList
<TYPE
>::remove_all_objects()
222 //printf("ArrayList<TYPE>::remove_all_objects 1 %d\n", total);
223 for(int i
= 0; i
< total
; i
++)
234 void ArrayList
<TYPE
>::remove_all()
239 // sort from least to greatest value
241 void ArrayList
<TYPE
>::sort()
249 for(int i
= 0, j
= 1; j
< total
; i
++, j
++)
251 if(values
[j
] < values
[i
])
254 values
[i
] = values
[j
];
263 int ArrayList
<TYPE
>::number_of(TYPE object
)
265 for(int i
= 0; i
< total
; i
++)
267 if(values
[i
] == object
) return i
;