Ian Jauslin
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/array.c')
-rw-r--r--src/array.c227
1 files changed, 227 insertions, 0 deletions
diff --git a/src/array.c b/src/array.c
new file mode 100644
index 0000000..772cb39
--- /dev/null
+++ b/src/array.c
@@ -0,0 +1,227 @@
+/*
+Copyright 2016 Ian Jauslin
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+#include "array.h"
+#include <stdlib.h>
+#include <stdarg.h>
+#include <stdio.h>
+#include "errors.h"
+#include "polynomial.h"
+#include "utils.h"
+
+//--------------------------------------------------
+//
+// integer array (array_int)
+//
+//--------------------------------------------------
+#include "array_int.h"
+#include "array_base.c"
+
+
+//--------------------------------------------------
+//
+// unsigned integer array (array_uint)
+//
+//--------------------------------------------------
+#include "array_uint.h"
+#include "array_base.c"
+
+//--------------------------------------------------
+//
+// double array (array_double)
+//
+//--------------------------------------------------
+#include "array_double.h"
+#include "array_base.c"
+
+
+//--------------------------------------------------
+//
+// long double array (array_ldouble)
+//
+//--------------------------------------------------
+#include "array_ldouble.h"
+#include "array_base.c"
+
+
+//--------------------------------------------------
+//
+// MPFR array (array_mpfr)
+//
+//--------------------------------------------------
+#include "array_mpfr.h"
+#include "array_base.c"
+
+
+//--------------------------------------------------
+//
+// array of MPFR arrays (array_2_mpfr)
+//
+//--------------------------------------------------
+#include "array_2_mpfr.h"
+#include "array_base.c"
+
+
+//--------------------------------------------------
+//
+// character array (array_char)
+//
+//--------------------------------------------------
+#include "array_char.h"
+#include "array_base.c"
+
+// append a char*
+int array_char_append_str(char* str, array_char* output){
+ char* ptr;
+ for (ptr=str;*ptr!='\0';ptr++){
+ array_char_append(*ptr, output);
+ }
+ return(0);
+}
+
+// convert to char*
+int array_char_to_str(array_char input, char** output){
+ unsigned int i;
+ (*output)=calloc(input.length+1,sizeof(char));
+ for(i=0;i<input.length;i++){
+ (*output)[i]=input.values[i];
+ }
+ if((*output)[input.length-1]!='\0'){
+ (*output)[input.length]='\0';
+ }
+ return(0);
+}
+// noinit (changes the size of input if needed)
+char* array_char_to_str_noinit(array_char* input){
+ if(input->values[input->length-1]!='\0'){
+ if(input->length==input->memory){
+ array_char_resize(input,input->length+1);
+ }
+ // add final '\0'
+ input->values[input->length]='\0';
+ }
+ return(input->values);
+}
+
+// convert from char*
+int str_to_array_char(char* str, array_char* output){
+ char* ptr;
+ unsigned int str_len=0;
+ for(ptr=str;*ptr!='\0';ptr++){
+ str_len++;
+ }
+ array_char_init(output, str_len);
+ for(ptr=str;*ptr!='\0';ptr++){
+ array_char_append(*ptr,output);
+ }
+ return(0);
+}
+
+// compare an array_char and a char*
+int array_char_cmp_str(array_char array_char, char* str){
+ unsigned int j;
+ for(j=0;j<array_char.length && str[j]!='\0';j++){
+ if(array_char.values[j]!=str[j]){
+ return(0);
+ }
+ }
+ if(j==array_char.length && str[j]=='\0'){
+ return(1);
+ }
+ return(0);
+}
+
+// format strings
+int array_char_snprintf(array_char* output, char* fmt, ...){
+ size_t size=100;
+ unsigned int extra_size;
+ char* out_str=calloc(size,sizeof(char));
+ char* ptr;
+ va_list vaptr;
+
+ // initialize argument list starting after fmt
+ va_start(vaptr, fmt);
+ // print format
+ extra_size=vsnprintf(out_str, size, fmt, vaptr);
+ va_end(vaptr);
+
+ // if too large
+ if(extra_size>size){
+ // resize
+ free(out_str);
+ // +1 for '\0'
+ size=extra_size+1;
+ out_str=calloc(size,sizeof(char));
+ // read format again
+ va_start(vaptr, fmt);
+ vsnprintf(out_str,size,fmt,vaptr);
+ va_end(vaptr);
+ }
+
+ // write to char array
+ for(ptr=out_str;*ptr!='\0';ptr++){
+ array_char_append(*ptr, output);
+ }
+
+ free(out_str);
+
+ return(0);
+}
+
+
+//--------------------------------------------------
+//
+// string array (array_str)
+//
+//--------------------------------------------------
+#include "array_str.h"
+#include "array_base.c"
+
+
+//--------------------------------------------------
+//
+// mpfr polynomial array (array_polynomial_mpfr)
+//
+//--------------------------------------------------
+#include "array_polynomial_mpfr.h"
+#include "array_base.c"
+
+
+//--------------------------------------------------
+//
+// double polynomial array (array_polynomial_double)
+//
+//--------------------------------------------------
+#include "array_polynomial_double.h"
+#include "array_base.c"
+
+
+//--------------------------------------------------
+//
+// long double polynomial array (array_polynomial_ldouble)
+//
+//--------------------------------------------------
+#include "array_polynomial_ldouble.h"
+#include "array_base.c"
+
+
+//--------------------------------------------------
+//
+// pthread_t array (array_pthread_t)
+//
+//--------------------------------------------------
+#include "array_pthread_t.h"
+#include "array_base.c"