pelib  2.0.0
include/pelib/array.h
Go to the documentation of this file.
00001 /*
00002  * array.h
00003  *
00004  *  Created on: 5 Sep 2011
00005  *  Copyright 2011 Nicolas Melot
00006  *
00007  * This file is part of pelib.
00008  * 
00009  *     pelib is free software: you can redistribute it and/or modify
00010  *     it under the terms of the GNU General Public License as published by
00011  *     the Free Software Foundation, either version 3 of the License, or
00012  *     (at your option) any later version.
00013  * 
00014  *     pelib is distributed in the hope that it will be useful,
00015  *     but WITHOUT ANY WARRANTY; without even the implied warranty of
00016  *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00017  *     GNU General Public License for more details.
00018  * 
00019  *     You should have received a copy of the GNU General Public License
00020  *     along with pelib. If not, see <http://www.gnu.org/licenses/>.
00021  * 
00022  */
00023 
00024 #include <pelib/template.h>
00025 #if PELIB_CONCAT_2(DONE_array_, ARRAY_T) == 0
00026 
00027 #define array(elem) PELIB_CONCAT_2(array_, elem)
00028 #define array_t(elem) PELIB_CONCAT_2(array(elem), _t)
00029 
00030 #define pelib_array_loadfilename(elem) PELIB_CONCAT_3(pelib_, array(elem), _loadfilename)
00031 #define pelib_array_loadfilenamebinary(elem) PELIB_CONCAT_3(pelib_, array(elem), _loadfilenamebinary)
00032 #define pelib_array_preloadfilenamebinary(elem) PELIB_CONCAT_3(pelib_, array(elem), _preloadfilenamebinary)
00033 #define pelib_array_loadfilenamewindowbinary(elem) PELIB_CONCAT_3(pelib_, array(elem), _loadfilenamewindowbinary)
00034 #define pelib_array_storefilename(elem) PELIB_CONCAT_3(pelib_, array(elem), _storefilename)
00035 #define pelib_array_storefilenamebinary(elem) PELIB_CONCAT_3(pelib_, array(elem), _storefilenamebinary)
00036 #define pelib_array_checkascending(elem) PELIB_CONCAT_3(pelib_, array(elem), _checkascending)
00037 #define pelib_array_read(elem) PELIB_CONCAT_3(pelib_, array(elem), _read)
00038 #define pelib_array_write(elem) PELIB_CONCAT_3(pelib_, array(elem), _write)
00039 #define pelib_array_append(elem) PELIB_CONCAT_3(pelib_, array(elem), _append)
00040 #define pelib_array_length(elem) PELIB_CONCAT_3(pelib_, array(elem), _length)
00041 #define pelib_array_capacity(elem) PELIB_CONCAT_3(pelib_, array(elem), _capacity)
00042 #define pelib_array_compare(elem) PELIB_CONCAT_3(pelib_, array(elem), _compare)
00043 
00045 struct array(ARRAY_T)
00046   {
00047     size_t capacity; 
00048     size_t length; 
00049     ARRAY_T* data; 
00050   };
00051 typedef struct array(ARRAY_T) array_t(ARRAY_T);
00052 
00053 #define STRUCT_T array_t(ARRAY_T)
00054 #include <pelib/structure.h>
00055 
00057 array_t(ARRAY_T)* pelib_array_loadfilename(ARRAY_T)(char*);
00058 
00060 array_t(ARRAY_T)* pelib_array_loadfilenamebinary(ARRAY_T)(char*);
00061 
00063 array_t(ARRAY_T)* pelib_array_preloadfilenamebinary(ARRAY_T)(char*);
00064 
00069 array_t(ARRAY_T)* pelib_array_loadfilenamewindowbinary(ARRAY_T)(char*, size_t from, size_t to);
00071 int
00072 pelib_array_storefilename(ARRAY_T)(array_t(ARRAY_T)*, char*);
00074 int
00075 pelib_array_storefilenamebinary(ARRAY_T)(array_t(ARRAY_T)*, char*);
00077 int
00078 pelib_array_checkascending(ARRAY_T)(array_t(ARRAY_T)*);
00080 ARRAY_T
00081 pelib_array_read(ARRAY_T)(array_t(ARRAY_T)*, size_t i);
00083 int
00084 pelib_array_write(ARRAY_T)(array_t(ARRAY_T)*, size_t i, ARRAY_T elem);
00088 int
00089 pelib_array_append(ARRAY_T)(array_t(ARRAY_T)*, ARRAY_T elem);
00091 size_t
00092 pelib_array_length(ARRAY_T)(array_t(ARRAY_T)*);
00094 size_t
00095 pelib_array_capacity(ARRAY_T)(array_t(ARRAY_T)*);
00099 int
00100 pelib_array_compare(ARRAY_T)(array_t(ARRAY_T)* a1, array_t(ARRAY_T)* a2);
00101 
00102 #endif /* ARRAY_H_ */
00103 
00104 // Make sure the symbol does not propagate any further
00105 #undef ARRAY_T