many fixes in icmp and rtl8139 driver code
[quarnos.git] / libs / array.h
blobdf5652d42d3e6213485a8914a7fbd155177adb0a
1 /* Quarn OS
3 * Pointer
5 * Copyright (C) 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.
23 #ifndef _ARRAY_H_
24 #define _ARRAY_H_
26 #include "buffer.h"
27 #include "manes/exception.h"
29 template<typename T>
30 class array {
31 private:
32 T *data;
33 int size;
34 public:
35 array(int count) : data(new T[count]), size(count * sizeof(T)) { }
36 array(T* _data, int _size) : data(_data), size(_size) { }
37 ~array() {
38 delete data;
41 T &operator[](int index) {
42 if (index >= 0 && index < size / sizeof(T))
43 return data[index];
45 throw new index_out_of_range_exception();
48 int length() const {
49 return size / sizeof(T);
52 template<typename U>
53 array<U> cast() {
54 return array<U>(reinterpret_cast<U*>(data), size);
57 static array<T> from_buffer(const buffer &x) {
58 return array<T>((T*)x.get_address(), x.get_size());
61 buffer to_buffer() const {
62 return buffer(data, size);
67 template<typename T, int X>
68 class array_stack {
69 private:
70 T data[X];
71 const int size;
72 public:
73 array_stack() : size(X) { }
75 T &operator[](int index) {
76 if (index >= 0 && index < size)
77 return data[index];
79 throw new index_out_of_range_exception();
82 #endif