net: udp sending data routine
[quarnos.git] / libs / array.h
blob0aa9753f8ecbf2630e9f4c42a179fa189d562053
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 template<typename U>
49 array<U> cast() {
50 return array<U>(reinterpret_cast<U*>(data), size);
53 static array<T> from_buffer(const buffer &x) {
54 return array<T>((T*)x.get_address(), x.get_size());
57 buffer to_buffer() const {
58 return buffer(data, size);
63 template<typename T, int X>
64 class array_stack {
65 private:
66 T data[X];
67 const int size;
68 public:
69 array_stack() : size(X) { }
71 T &operator[](int index) {
72 if (index >= 0 && index < size)
73 return data[index];
75 throw new index_out_of_range_exception();
78 #endif