5 * Copyright (C) 2008-2009 Pawel Dziepak
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License along
18 * with this program; if not, write to the Free Software Foundation, Inc.,
19 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
24 #error This file can not be compiled directly.
27 //#include "libs/string.h"
28 //#include "manes/error.h"
31 vector_element
<T
>::vector_element() : value((T
*)0) {}
34 vector_element
<T
>::~vector_element() {
40 void vector_element
<T
>::set_value(const T
&val
) {
45 T
&vector_element
<T
>::get_value() {
48 // manes::error er("vector: element is not present");
54 void memrcpy(char *a
, char *b
, int size
) __attribute__((weak
));
55 void memrcpy(char *a
, char *b
, int size
) {
56 for (int i
= size
- 1; i
>= 0; i
--) a
[i
]=b
[i
];
60 void vector
<T
>::insert(const int i
, const T
&obj
) {
61 /* if (size < count + 1) {
62 vector_element<T> **temp = new vector_element<T>*[size * 2];
63 memcpy(temp, table, size * sizeof(vector_element<T>*));
68 memrcpy((char*)&(table[i+1]),(char*)&(table[i]), (size-i+1) * sizeof(vector_element<T>*));
69 vector_element<T> *element = new vector_element<T>();
70 element->set_value(obj);
76 void vector
<T
>::add(const T obj
) {
77 vector_element
<T
> *element
= new vector_element
<T
>();
78 if (size
< count
+ 1) {
79 vector_element
<T
> **temp
= new vector_element
<T
>*[size
* 2];
80 memcpy(temp
, table
, size
* sizeof(vector_element
<T
>*));
85 element
->set_value(obj
);
86 table
[count
] = element
;
91 void vector
<T
>::remove(const int i
) {
92 vector_element
<T
> *element
= table
[i
];
95 memcpy(&(table
[i
]), &(table
[i
+ 1]), (count
- i
+ 1) * sizeof(vector_element
<T
>*));
100 int vector
<T
>::get_count() const {
105 T
&vector
<T
>::operator[](const int index
) {
106 return table
[index
]->get_value();
110 const T
&vector
<T
>::operator[](const int index
) const {
111 return table
[index
]->get_value();
116 vector
<T
>::vector() : count(0), size(32) {
117 table
= new vector_element
<T
>*[size
];
121 vector
<T
>::~vector() {