Added: incubator/celix/trunk/celix/unzip.h URL: http://svn.apache.org/viewvc/incubator/celix/trunk/celix/unzip.h?rev=1043903&view=auto ============================================================================== --- incubator/celix/trunk/celix/unzip.h (added) +++ incubator/celix/trunk/celix/unzip.h Thu Dec 9 11:49:40 2010 @@ -0,0 +1,437 @@ +/* unzip.h -- IO for uncompress .zip files using zlib + Version 1.1, February 14h, 2010 + part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html ) + + Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html ) + + Modifications of Unzip for Zip64 + Copyright (C) 2007-2008 Even Rouault + + Modifications for Zip64 support on both zip and unzip + Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com ) + + For more info read MiniZip_info.txt + + --------------------------------------------------------------------------------- + + Condition of use and distribution are the same than zlib : + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + --------------------------------------------------------------------------------- + + Changes + + See header of unzip64.c + +*/ + +#ifndef _unz64_H +#define _unz64_H + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef _ZLIB_H +#include "zlib.h" +#endif + +#ifndef _ZLIBIOAPI_H +#include "ioapi.h" +#endif + +#ifdef HAVE_BZIP2 +#include "bzlib.h" +#endif + +#define Z_BZIP2ED 12 + +#if defined(STRICTUNZIP) || defined(STRICTZIPUNZIP) +/* like the STRICT of WIN32, we define a pointer that cannot be converted + from (void*) without cast */ +typedef struct TagunzFile__ { int unused; } unzFile__; +typedef unzFile__ *unzFile; +#else +typedef voidp unzFile; +#endif + + +#define UNZ_OK (0) +#define UNZ_END_OF_LIST_OF_FILE (-100) +#define UNZ_ERRNO (Z_ERRNO) +#define UNZ_EOF (0) +#define UNZ_PARAMERROR (-102) +#define UNZ_BADZIPFILE (-103) +#define UNZ_INTERNALERROR (-104) +#define UNZ_CRCERROR (-105) + +/* tm_unz contain date/time info */ +typedef struct tm_unz_s +{ + uInt tm_sec; /* seconds after the minute - [0,59] */ + uInt tm_min; /* minutes after the hour - [0,59] */ + uInt tm_hour; /* hours since midnight - [0,23] */ + uInt tm_mday; /* day of the month - [1,31] */ + uInt tm_mon; /* months since January - [0,11] */ + uInt tm_year; /* years - [1980..2044] */ +} tm_unz; + +/* unz_global_info structure contain global data about the ZIPfile + These data comes from the end of central dir */ +typedef struct unz_global_info64_s +{ + ZPOS64_T number_entry; /* total number of entries in + the central dir on this disk */ + uLong size_comment; /* size of the global comment of the zipfile */ +} unz_global_info64; + +typedef struct unz_global_info_s +{ + uLong number_entry; /* total number of entries in + the central dir on this disk */ + uLong size_comment; /* size of the global comment of the zipfile */ +} unz_global_info; + +/* unz_file_info contain information about a file in the zipfile */ +typedef struct unz_file_info64_s +{ + uLong version; /* version made by 2 bytes */ + uLong version_needed; /* version needed to extract 2 bytes */ + uLong flag; /* general purpose bit flag 2 bytes */ + uLong compression_method; /* compression method 2 bytes */ + uLong dosDate; /* last mod file date in Dos fmt 4 bytes */ + uLong crc; /* crc-32 4 bytes */ + ZPOS64_T compressed_size; /* compressed size 8 bytes */ + ZPOS64_T uncompressed_size; /* uncompressed size 8 bytes */ + uLong size_filename; /* filename length 2 bytes */ + uLong size_file_extra; /* extra field length 2 bytes */ + uLong size_file_comment; /* file comment length 2 bytes */ + + uLong disk_num_start; /* disk number start 2 bytes */ + uLong internal_fa; /* internal file attributes 2 bytes */ + uLong external_fa; /* external file attributes 4 bytes */ + + tm_unz tmu_date; +} unz_file_info64; + +typedef struct unz_file_info_s +{ + uLong version; /* version made by 2 bytes */ + uLong version_needed; /* version needed to extract 2 bytes */ + uLong flag; /* general purpose bit flag 2 bytes */ + uLong compression_method; /* compression method 2 bytes */ + uLong dosDate; /* last mod file date in Dos fmt 4 bytes */ + uLong crc; /* crc-32 4 bytes */ + uLong compressed_size; /* compressed size 4 bytes */ + uLong uncompressed_size; /* uncompressed size 4 bytes */ + uLong size_filename; /* filename length 2 bytes */ + uLong size_file_extra; /* extra field length 2 bytes */ + uLong size_file_comment; /* file comment length 2 bytes */ + + uLong disk_num_start; /* disk number start 2 bytes */ + uLong internal_fa; /* internal file attributes 2 bytes */ + uLong external_fa; /* external file attributes 4 bytes */ + + tm_unz tmu_date; +} unz_file_info; + +extern int ZEXPORT unzStringFileNameCompare OF ((const char* fileName1, + const char* fileName2, + int iCaseSensitivity)); +/* + Compare two filename (fileName1,fileName2). + If iCaseSenisivity = 1, comparision is case sensitivity (like strcmp) + If iCaseSenisivity = 2, comparision is not case sensitivity (like strcmpi + or strcasecmp) + If iCaseSenisivity = 0, case sensitivity is defaut of your operating system + (like 1 on Unix, 2 on Windows) +*/ + + +extern unzFile ZEXPORT unzOpen OF((const char *path)); +extern unzFile ZEXPORT unzOpen64 OF((const void *path)); +/* + Open a Zip file. path contain the full pathname (by example, + on a Windows XP computer "c:\\zlib\\zlib113.zip" or on an Unix computer + "zlib/zlib113.zip". + If the zipfile cannot be opened (file don't exist or in not valid), the + return value is NULL. + Else, the return value is a unzFile Handle, usable with other function + of this unzip package. + the "64" function take a const void* pointer, because the path is just the + value passed to the open64_file_func callback. + Under Windows, if UNICODE is defined, using fill_fopen64_filefunc, the path + is a pointer to a wide unicode string (LPCTSTR is LPCWSTR), so const char* + does not describe the reality +*/ + + +extern unzFile ZEXPORT unzOpen2 OF((const char *path, + zlib_filefunc_def* pzlib_filefunc_def)); +/* + Open a Zip file, like unzOpen, but provide a set of file low level API + for read/write the zip file (see ioapi.h) +*/ + +extern unzFile ZEXPORT unzOpen2_64 OF((const void *path, + zlib_filefunc64_def* pzlib_filefunc_def)); +/* + Open a Zip file, like unz64Open, but provide a set of file low level API + for read/write the zip file (see ioapi.h) +*/ + +extern int ZEXPORT unzClose OF((unzFile file)); +/* + Close a ZipFile opened with unzipOpen. + If there is files inside the .Zip opened with unzOpenCurrentFile (see later), + these files MUST be closed with unzipCloseCurrentFile before call unzipClose. + return UNZ_OK if there is no problem. */ + +extern int ZEXPORT unzGetGlobalInfo OF((unzFile file, + unz_global_info *pglobal_info)); + +extern int ZEXPORT unzGetGlobalInfo64 OF((unzFile file, + unz_global_info64 *pglobal_info)); +/* + Write info about the ZipFile in the *pglobal_info structure. + No preparation of the structure is needed + return UNZ_OK if there is no problem. */ + + +extern int ZEXPORT unzGetGlobalComment OF((unzFile file, + char *szComment, + uLong uSizeBuf)); +/* + Get the global comment string of the ZipFile, in the szComment buffer. + uSizeBuf is the size of the szComment buffer. + return the number of byte copied or an error code <0 +*/ + + +/***************************************************************************/ +/* Unzip package allow you browse the directory of the zipfile */ + +extern int ZEXPORT unzGoToFirstFile OF((unzFile file)); +/* + Set the current file of the zipfile to the first file. + return UNZ_OK if there is no problem +*/ + +extern int ZEXPORT unzGoToNextFile OF((unzFile file)); +/* + Set the current file of the zipfile to the next file. + return UNZ_OK if there is no problem + return UNZ_END_OF_LIST_OF_FILE if the actual file was the latest. +*/ + +extern int ZEXPORT unzLocateFile OF((unzFile file, + const char *szFileName, + int iCaseSensitivity)); +/* + Try locate the file szFileName in the zipfile. + For the iCaseSensitivity signification, see unzStringFileNameCompare + + return value : + UNZ_OK if the file is found. It becomes the current file. + UNZ_END_OF_LIST_OF_FILE if the file is not found +*/ + + +/* ****************************************** */ +/* Ryan supplied functions */ +/* unz_file_info contain information about a file in the zipfile */ +typedef struct unz_file_pos_s +{ + uLong pos_in_zip_directory; /* offset in zip file directory */ + uLong num_of_file; /* # of file */ +} unz_file_pos; + +extern int ZEXPORT unzGetFilePos( + unzFile file, + unz_file_pos* file_pos); + +extern int ZEXPORT unzGoToFilePos( + unzFile file, + unz_file_pos* file_pos); + +typedef struct unz64_file_pos_s +{ + ZPOS64_T pos_in_zip_directory; /* offset in zip file directory */ + ZPOS64_T num_of_file; /* # of file */ +} unz64_file_pos; + +extern int ZEXPORT unzGetFilePos64( + unzFile file, + unz64_file_pos* file_pos); + +extern int ZEXPORT unzGoToFilePos64( + unzFile file, + const unz64_file_pos* file_pos); + +/* ****************************************** */ + +extern int ZEXPORT unzGetCurrentFileInfo64 OF((unzFile file, + unz_file_info64 *pfile_info, + char *szFileName, + uLong fileNameBufferSize, + void *extraField, + uLong extraFieldBufferSize, + char *szComment, + uLong commentBufferSize)); + +extern int ZEXPORT unzGetCurrentFileInfo OF((unzFile file, + unz_file_info *pfile_info, + char *szFileName, + uLong fileNameBufferSize, + void *extraField, + uLong extraFieldBufferSize, + char *szComment, + uLong commentBufferSize)); +/* + Get Info about the current file + if pfile_info!=NULL, the *pfile_info structure will contain somes info about + the current file + if szFileName!=NULL, the filemane string will be copied in szFileName + (fileNameBufferSize is the size of the buffer) + if extraField!=NULL, the extra field information will be copied in extraField + (extraFieldBufferSize is the size of the buffer). + This is the Central-header version of the extra field + if szComment!=NULL, the comment string of the file will be copied in szComment + (commentBufferSize is the size of the buffer) +*/ + + +/** Addition for GDAL : START */ + +extern ZPOS64_T ZEXPORT unzGetCurrentFileZStreamPos64 OF((unzFile file)); + +/** Addition for GDAL : END */ + + +/***************************************************************************/ +/* for reading the content of the current zipfile, you can open it, read data + from it, and close it (you can close it before reading all the file) + */ + +extern int ZEXPORT unzOpenCurrentFile OF((unzFile file)); +/* + Open for reading data the current file in the zipfile. + If there is no error, the return value is UNZ_OK. +*/ + +extern int ZEXPORT unzOpenCurrentFilePassword OF((unzFile file, + const char* password)); +/* + Open for reading data the current file in the zipfile. + password is a crypting password + If there is no error, the return value is UNZ_OK. +*/ + +extern int ZEXPORT unzOpenCurrentFile2 OF((unzFile file, + int* method, + int* level, + int raw)); +/* + Same than unzOpenCurrentFile, but open for read raw the file (not uncompress) + if raw==1 + *method will receive method of compression, *level will receive level of + compression + note : you can set level parameter as NULL (if you did not want known level, + but you CANNOT set method parameter as NULL +*/ + +extern int ZEXPORT unzOpenCurrentFile3 OF((unzFile file, + int* method, + int* level, + int raw, + const char* password)); +/* + Same than unzOpenCurrentFile, but open for read raw the file (not uncompress) + if raw==1 + *method will receive method of compression, *level will receive level of + compression + note : you can set level parameter as NULL (if you did not want known level, + but you CANNOT set method parameter as NULL +*/ + + +extern int ZEXPORT unzCloseCurrentFile OF((unzFile file)); +/* + Close the file in zip opened with unzOpenCurrentFile + Return UNZ_CRCERROR if all the file was read but the CRC is not good +*/ + +extern int ZEXPORT unzReadCurrentFile OF((unzFile file, + voidp buf, + unsigned len)); +/* + Read bytes from the current file (opened by unzOpenCurrentFile) + buf contain buffer where data must be copied + len the size of buf. + + return the number of byte copied if somes bytes are copied + return 0 if the end of file was reached + return <0 with error code if there is an error + (UNZ_ERRNO for IO error, or zLib error for uncompress error) +*/ + +extern z_off_t ZEXPORT unztell OF((unzFile file)); + +extern ZPOS64_T ZEXPORT unztell64 OF((unzFile file)); +/* + Give the current position in uncompressed data +*/ + +extern int ZEXPORT unzeof OF((unzFile file)); +/* + return 1 if the end of file was reached, 0 elsewhere +*/ + +extern int ZEXPORT unzGetLocalExtrafield OF((unzFile file, + voidp buf, + unsigned len)); +/* + Read extra field from the current file (opened by unzOpenCurrentFile) + This is the local-header version of the extra field (sometimes, there is + more info in the local-header version than in the central-header) + + if buf==NULL, it return the size of the local extra field + + if buf!=NULL, len is the size of the buffer, the extra header is copied in + buf. + the return value is the number of bytes copied in buf, or (if <0) + the error code +*/ + +/***************************************************************************/ + +/* Get the current file offset */ +extern ZPOS64_T ZEXPORT unzGetOffset64 (unzFile file); +extern uLong ZEXPORT unzGetOffset (unzFile file); + +/* Set the current file offset */ +extern int ZEXPORT unzSetOffset64 (unzFile file, ZPOS64_T pos); +extern int ZEXPORT unzSetOffset (unzFile file, uLong pos); + + + +#ifdef __cplusplus +} +#endif + +#endif /* _unz64_H */
Added: incubator/celix/trunk/celix/utils.c URL: http://svn.apache.org/viewvc/incubator/celix/trunk/celix/utils.c?rev=1043903&view=auto ============================================================================== --- incubator/celix/trunk/celix/utils.c (added) +++ incubator/celix/trunk/celix/utils.c Thu Dec 9 11:49:40 2010 @@ -0,0 +1,58 @@ +/* + * utils.c + * + * Created on: Jul 27, 2010 + * Author: alexanderb + */ +#include <stdlib.h> +#include <string.h> + +#include "utils.h" + +unsigned int string_hash(void * string) { + char * str = (char *) string; + + unsigned int hash = 1315423911; + unsigned int i = 0; + int len = strlen(str); + + for(i = 0; i < len; str++, i++) + { + hash ^= ((hash << 5) + (*str) + (hash >> 2)); + } + + return hash; +} + +int string_equals(void * string, void * toCompare) { + return strcmp((char *)string, (char *) toCompare) == 0; +} + +char * string_ndup(const char *s, size_t n) { + size_t len = strlen(s); + char *ret; + + if (len <= n) { + return strdup(s); + } + + ret = malloc(n + 1); + strncpy(ret, s, n); + ret[n] = '\0'; + return ret; +} + +char * string_trim(char * string) { + char *end; + // Trim leading space + while(isspace(*string)) string++; + + // Trim trailing space + end = string + strlen(string) - 1; + while(end > string && isspace(*end)) end--; + + // Write new null terminator + *(end+1) = 0; + + return string; +} Added: incubator/celix/trunk/celix/utils.h URL: http://svn.apache.org/viewvc/incubator/celix/trunk/celix/utils.h?rev=1043903&view=auto ============================================================================== --- incubator/celix/trunk/celix/utils.h (added) +++ incubator/celix/trunk/celix/utils.h Thu Dec 9 11:49:40 2010 @@ -0,0 +1,18 @@ +/* + * utils.h + * + * Created on: Jul 27, 2010 + * Author: alexanderb + */ + +#ifndef UTILS_H_ +#define UTILS_H_ + +#include <ctype.h> + +unsigned int string_hash(void * string); +int string_equals(void * string, void * toCompare); +char * string_ndup(const char *s, size_t n); +char * string_trim(char * string); + +#endif /* UTILS_H_ */ Added: incubator/celix/trunk/celix/version.c URL: http://svn.apache.org/viewvc/incubator/celix/trunk/celix/version.c?rev=1043903&view=auto ============================================================================== --- incubator/celix/trunk/celix/version.c (added) +++ incubator/celix/trunk/celix/version.c Thu Dec 9 11:49:40 2010 @@ -0,0 +1,101 @@ +/* + * version.c + * + * Created on: Jul 12, 2010 + * Author: alexanderb + */ +#include <stdlib.h> +#include <stdio.h> +#include <string.h> + +#include "version.h" + +struct version { + int major; + int minor; + int micro; + char * qualifier; +}; + +VERSION version_createVersion(int major, int minor, int micro, char * qualifier) { + VERSION version = (VERSION) malloc(sizeof(*version)); + + version->major = major; + version->minor = minor; + version->micro = micro; + if (qualifier == NULL) { + qualifier = ""; + } + version->qualifier = qualifier; + + return version; +} + +VERSION version_createVersionFromString(char * version) { + int major = 0; + int minor = 0; + int micro = 0; + char * qualifier = ""; + + char delims[] = "."; + char * token = NULL; + + token = strtok(version, delims); + if (token != NULL) { + major = atoi(strdup(token)); + token = strtok(NULL, delims); + if (token != NULL) { + minor = atoi(token); + token = strtok(NULL, delims); + if (token != NULL) { + micro = atoi(token); + token = strtok(NULL, delims); + if (token != NULL) { + qualifier = strdup(token); + token = strtok(NULL, delims); + if (token != NULL) { + printf("invalid format"); + return NULL; + } + } + } + } + } + return version_createVersion(major, minor, micro, qualifier); +} + +VERSION version_createEmptyVersion() { + return version_createVersion(0, 0, 0, ""); +} + +int version_compareTo(VERSION version, VERSION compare) { + if (compare == version) { + return 0; + } + + int result = version->major - compare->major; + if (result != 0) { + return result; + } + + result = version->minor - compare->minor; + if (result != 0) { + return result; + } + + result = version->micro - compare->micro; + if (result != 0) { + return result; + } + + return strcmp(version->qualifier, compare->qualifier); +} + +char * version_toString(VERSION version) { + char result[sizeof(version->major) * 3 + strlen(version->qualifier) + 1]; + sprintf(result, "%d.%d.%d", version->major, version->minor, version->micro); + if (strlen(version->qualifier) > 0) { + strcat(result, version->qualifier); + } + return strdup(result); +} Added: incubator/celix/trunk/celix/version.h URL: http://svn.apache.org/viewvc/incubator/celix/trunk/celix/version.h?rev=1043903&view=auto ============================================================================== --- incubator/celix/trunk/celix/version.h (added) +++ incubator/celix/trunk/celix/version.h Thu Dec 9 11:49:40 2010 @@ -0,0 +1,21 @@ +/* + * version.h + * + * Created on: Jul 12, 2010 + * Author: alexanderb + */ + +#ifndef VERSION_H_ +#define VERSION_H_ + +typedef struct version * VERSION; + +VERSION version_createVersion(int major, int minor, int micro, char * qualifier); +VERSION version_createVersionFromString(char * version); +VERSION version_createEmptyVersion(); + +int version_compareTo(VERSION version, VERSION compare); + +char * version_toString(VERSION version); + +#endif /* VERSION_H_ */ Added: incubator/celix/trunk/celix/version_range.c URL: http://svn.apache.org/viewvc/incubator/celix/trunk/celix/version_range.c?rev=1043903&view=auto ============================================================================== --- incubator/celix/trunk/celix/version_range.c (added) +++ incubator/celix/trunk/celix/version_range.c Thu Dec 9 11:49:40 2010 @@ -0,0 +1,102 @@ +/* + * version_range.c + * + * Created on: Jul 12, 2010 + * Author: alexanderb + */ + +#include <stdlib.h> +#include <string.h> + +#include "version_range.h" + +struct versionRange { + VERSION low; + bool isLowInclusive; + VERSION high; + bool isHighInclusive; + +}; + +VERSION_RANGE versionRange_createVersionRange(VERSION low, bool isLowInclusive, + VERSION high, bool isHighInclusive) { + VERSION_RANGE range = (VERSION_RANGE) malloc(sizeof(*range)); + + range->low = low; + range->isLowInclusive = isLowInclusive; + range->high = high; + range->isHighInclusive = isHighInclusive; + + return range; +} + +VERSION_RANGE versionRange_createInfiniteVersionRange() { + VERSION_RANGE range = (VERSION_RANGE) malloc(sizeof(*range)); + + range->low = version_createEmptyVersion(); + range->isLowInclusive = true; + range->high = NULL; + range->isHighInclusive = true; + + return range; +} + +bool versionRange_isInRange(VERSION_RANGE versionRange, VERSION version) { + if (versionRange->high == NULL) { + return (version_compareTo(version, versionRange->low) >= 0); + } else if (versionRange->isLowInclusive && versionRange->isHighInclusive) { + return (version_compareTo(version, versionRange->low) >= 0) + && (version_compareTo(version, versionRange->high) <= 0); + } else if (versionRange->isHighInclusive) { + return (version_compareTo(version, versionRange->low) > 0) + && (version_compareTo(version, versionRange->high) <= 0); + } else if (versionRange->isLowInclusive) { + return (version_compareTo(version, versionRange->low) >= 0) + && (version_compareTo(version, versionRange->high) < 0); + } else { + return (version_compareTo(version, versionRange->low) > 0) + && (version_compareTo(version, versionRange->high) < 0); + } +} + +bool versionRange_intersects(VERSION_RANGE versionRange, VERSION_RANGE toCompare) { + bool isFloorLessThanCeiling = false; + if ((versionRange->high == NULL) + || (version_compareTo(versionRange->high, toCompare->low) > 0) + || ((version_compareTo(versionRange->high, toCompare->low) == 0) + && versionRange->isHighInclusive && toCompare->isLowInclusive)) { + isFloorLessThanCeiling = true; + } + bool isCeilingGreaterThanFloor = false; + if ((toCompare->high == NULL) + || (version_compareTo(versionRange->low, toCompare->high) < 0) + || ((version_compareTo(versionRange->low, toCompare->high) == 0) + && versionRange->isLowInclusive && toCompare->isHighInclusive)) { + isCeilingGreaterThanFloor = true; + } + return isFloorLessThanCeiling && isCeilingGreaterThanFloor; +} + +VERSION_RANGE versionRange_parse(char * range) { + if (strchr(range, ',') != NULL) { + int vlowL = strcspn(range+1, ","); + char * vlow = (char *) malloc(sizeof(*vlow * vlowL)); + vlow = strncpy(vlow, range+1, vlowL); + int vhighL = strlen(range+1) - vlowL - 2; + char * vhigh = (char *) malloc(sizeof(*vhigh * vhighL)); + vhigh = strncpy(vhigh, range+vlowL+2, vhighL); + + int rangeL = strlen(range); + char start = range[0]; + char end = range[rangeL-1]; + + return versionRange_createVersionRange( + version_createVersionFromString(vlow), + start == '[', + version_createVersionFromString(vhigh), + end ==']' + ); + } else { + return versionRange_createVersionRange(version_createVersionFromString(range), true, NULL, false); + } +} Added: incubator/celix/trunk/celix/version_range.h URL: http://svn.apache.org/viewvc/incubator/celix/trunk/celix/version_range.h?rev=1043903&view=auto ============================================================================== --- incubator/celix/trunk/celix/version_range.h (added) +++ incubator/celix/trunk/celix/version_range.h Thu Dec 9 11:49:40 2010 @@ -0,0 +1,26 @@ +/* + * version_range.h + * + * Created on: Jul 12, 2010 + * Author: alexanderb + */ + +#ifndef VERSION_RANGE_H_ +#define VERSION_RANGE_H_ + +#include <stdbool.h> + +#include "version.h" + +typedef struct versionRange * VERSION_RANGE; + +VERSION_RANGE versionRange_createVersionRange(VERSION low, bool isLowInclusive, VERSION high, bool isHighInclusive); +VERSION_RANGE versionRange_createInfiniteVersionRange(); + +bool versionRange_isInRange(VERSION_RANGE versionRange, VERSION version); + +bool versionRange_intersects(VERSION_RANGE versionRange, VERSION_RANGE toCompare); + +VERSION_RANGE versionRange_parse(char * range); + +#endif /* VERSION_RANGE_H_ */ Added: incubator/celix/trunk/celix/wire.c URL: http://svn.apache.org/viewvc/incubator/celix/trunk/celix/wire.c?rev=1043903&view=auto ============================================================================== --- incubator/celix/trunk/celix/wire.c (added) +++ incubator/celix/trunk/celix/wire.c Thu Dec 9 11:49:40 2010 @@ -0,0 +1,44 @@ +/* + * wire.c + * + * Created on: Jul 19, 2010 + * Author: alexanderb + */ +#include <stdlib.h> +#include <string.h> + +#include "wire.h" + +struct wire { + MODULE importer; + REQUIREMENT requirement; + MODULE exporter; + CAPABILITY capability; +}; + +WIRE wire_create(MODULE importer, REQUIREMENT requirement, + MODULE exporter, CAPABILITY capability) { + WIRE wire = (WIRE) malloc(sizeof(*wire)); + wire->importer = importer; + wire->requirement = requirement; + wire->exporter = exporter; + wire->capability = capability; + + return wire; +} + +CAPABILITY wire_getCapability(WIRE wire) { + return wire->capability; +} + +REQUIREMENT wire_getRequirement(WIRE wire) { + return wire->requirement; +} + +MODULE wire_getImporter(WIRE wire) { + return wire->importer; +} + +MODULE wire_getExporter(WIRE wire) { + return wire->exporter; +} Added: incubator/celix/trunk/celix/wire.h URL: http://svn.apache.org/viewvc/incubator/celix/trunk/celix/wire.h?rev=1043903&view=auto ============================================================================== --- incubator/celix/trunk/celix/wire.h (added) +++ incubator/celix/trunk/celix/wire.h Thu Dec 9 11:49:40 2010 @@ -0,0 +1,25 @@ +/* + * wire.h + * + * Created on: Jul 12, 2010 + * Author: alexanderb + */ + +#ifndef WIRE_H_ +#define WIRE_H_ + +#include "requirement.h" +#include "capability.h" +#include "module.h" +#include "linkedlist.h" +#include "headers.h" + +WIRE wire_create(MODULE importer, REQUIREMENT requirement, + MODULE exporter, CAPABILITY capability); + +CAPABILITY wire_getCapability(WIRE wire); +REQUIREMENT wire_getRequirement(WIRE wire); +MODULE wire_getImporter(WIRE wire); +MODULE wire_getExporter(WIRE wire); + +#endif /* WIRE_H_ */
