Platon Technologies
not logged in Login Registration
EnglishSlovak
open source software development celebrating 10 years of open source development! Friday, April 19, 2024

Diff for libcfg+/Attic/strdyn.c between version 1.1 and 1.2

version 1.1, 2001/10/04 19:34:36 version 1.2, 2001/10/09 15:01:33
Line 1 
Line 1 
 #include <stdio.h>  #include <stdio.h>
 #include <string.h>  #include <string.h>
 #include <stdlib.h>  #include <stdlib.h>
   #include <stdarg.h>
   
 #include "strdyn.h"  #include "strdyn.h"
   
Line 20  int strcnt(char *s, char c) {
Line 21  int strcnt(char *s, char c) {
   
 #endif  #endif
   
   char **strdyn_create(void) {
           register char **ar;
   
           if ((ar = (char **) malloc(1 * sizeof(char *))) == NULL)
                   return NULL;
   
           ar[0] = NULL;
   
           return ar;
   }
   
   char **strdyn_add_va(char **ar, ...) {
           register char *s;
           va_list ap;
   
           va_start(ap, ar);
   
           while ((s = va_arg(ap, char *)) != NULL)
                   if ((strdyn_add(ar, s)) == NULL)
                           return NULL;
   
           va_end(ap);
   }
   
   char **strdyn_create_va(char *s1, ...) {
           register char **ar;
   
           if ((ar = strdyn_create()) == NULL)
                   return NULL;
   
           if (s1 != NULL) {
                   register char *s;
                   va_list ap;
   
                   if ((ar = strdyn_add(ar, s1)) == NULL)
                           return NULL;
   
                   va_start(ap, s1);
   
                   while ((s = va_arg(ap, char *)) != NULL)
                           if ((ar = strdyn_add(ar, s)) == NULL)
                                   return NULL;
   
                   va_end(ap);
           }
   
           return ar;
   }
   
   
 void strdyn_free(char **ar) {  void strdyn_free(char **ar) {
         register int i = 0;          register int i;
   
         while (ar[i] != NULL)          for (i = 0; ar[i] != NULL; i++)
                 free(ar[i++]);                  free(ar[i]);
   
         free(ar);          free(ar);
 }  }
Line 116  char *strdyn_implode(char **ar, char sep
Line 167  char *strdyn_implode(char **ar, char sep
         register int i, str_size;          register int i, str_size;
         register char *str, *s;          register char *str, *s;
   
         i = 0;          for (i = 0, str_size = 0; ar[i] != NULL; )
         str_size = 0;  
         while (ar[i] != NULL)  
                 str_size += strlen(ar[i++]) + 1;                  str_size += strlen(ar[i++]) + 1;
   
         if ((str = (char*) malloc(str_size * sizeof(char))) == NULL)          if ((str = (char*) malloc(str_size * sizeof(char))) == NULL)
                 return NULL;                  return NULL;
   
         i = 0;          for (i = 0,     s = str; ar[i] != NULL; i++) {
         s = str;  
         while (ar[i] != NULL) {  
                 strcpy(s, ar[i]);                  strcpy(s, ar[i]);
                 s += strlen(ar[i]);                  s += strlen(ar[i]);
   
                 if (ar[i + 1] != NULL)                  if (ar[i + 1] != NULL)
                         *s++ = sep;                          *s++ = sep;
   
                 i++;  
         }          }
   
         return str;          return str;
Line 152  char *strdyn_implode2(char **ar, char se
Line 197  char *strdyn_implode2(char **ar, char se
         return s;          return s;
 }  }
   
   char **strdyn_conjunct(char **ar1, char **ar2) {
           register int i;
           register char **ar;
   
           if ((ar = strdyn_create()) == NULL)
                   return NULL;
   
           for (i = 0; ar2[i] != NULL; i++) {
                   if (! strdyn_compare(ar1, ar2[i])) {
                           if ((ar = strdyn_add(ar, ar2[i])) == NULL)
                                   return NULL;
                   }
           }
   
           return ar;
   }
   
   char **strdyn_consolide(char **ar1, char **ar2) {
           register int i;
           register char **ar;
   
           if ((ar = strdyn_create()) == NULL)
                   return NULL;
   
           for (i = 0; ar1[i] != NULL; i++) {
                   if (strdyn_compare(ar, ar1[i])) {
                           if ((ar = strdyn_add(ar, ar1[i])) == NULL)
                                   return NULL;
                   }
           }
   
           for (i = 0; ar2[i] != NULL; i++) {
                   if (strdyn_compare(ar, ar2[i])) {
                           if ((ar = strdyn_add(ar, ar2[i])) == NULL)
                                   return NULL;
                   }
           }
   
           return ar;
   }
   
   char **strdyn_add(char **ar, char *s) {
           register int count;
   
           count = strdyn_get_size(ar);
   
           if ((ar = (char **) realloc(ar, (count + 2) * sizeof(char *))) == NULL)
                   return NULL;
   
           ar[count] = strdup(s);
           ar[count + 1] = NULL;
   
           return ar;
   }
   
   char **strdyn_add_ar(char **ar, char **s_ar) {
           register int k;
   
           for (k = 0; s_ar[k] != NULL; k++) {
                   if ((ar = strdyn_add(ar, s_ar[k])) == NULL)
                           return NULL;
           }
   
           return ar;
   }
   
 int strdyn_search(char **ar, char *s) {  int strdyn_search(char **ar, char *s) {
         register int i;          register int i;
   
Line 178  int strdyn_compare_all(char **ar, char *
Line 289  int strdyn_compare_all(char **ar, char *
   
 #if defined(SELF) || defined(SELFTEST)  #if defined(SELF) || defined(SELFTEST)
   
 //#define TESTSTR "^^^QQQ^----^^_^_a12$$-a^^^^"  #define TESTSTR1 "___AAA_BBBB__C_DaDaD____"
 #define TESTSTR "-"  /* #define TESTSTR "-" */
 #define TESTSEP '^'  #define TESTSEP1 '_'
   
 int main(void) {  int main(void) {
   
         register int i;          register int i;
         char **ar;          char **ar1, **ar2, **ar_join, **ar_intersect;
         char *s;          char *s;
   
           ar2 = strdyn_create_va("A", "B", "C", "D", NULL);
   
           i = 0;
           while (ar2[i] != NULL) {
                   printf("ar2[%d] = \"%s\"\n", i, ar2[i]);
                   i++;
           }
   
         printf("strcnt(\"%s\", '%c') = %d\n",          printf("strcnt(\"%s\", '%c') = %d\n",
                                                         TESTSTR, TESTSEP, strcnt(TESTSTR, TESTSEP));                                                          TESTSTR1, TESTSEP1, strcnt(TESTSTR1, TESTSEP1));
   
         printf("strdyn_explode(\"%s\", '%c') = ar\n", TESTSTR, TESTSEP);          printf("strdyn_explode(\"%s\", '%c') = ar1\n", TESTSTR1, TESTSEP1);
         ar = strdyn_explode2(TESTSTR, TESTSEP);          ar1 = strdyn_explode2(TESTSTR1, TESTSEP1);
   
         i = 0;          i = 0;
         while (ar[i] != NULL) {          while (ar1[i] != NULL) {
                 printf("ar[%d] = \"%s\"\n", i, ar[i]);                  printf("ar1[%d] = \"%s\"\n", i, ar1[i]);
                 i++;                  i++;
         }          }
   
         s = strdyn_implode2(ar, TESTSEP);          s = strdyn_implode2(ar1, TESTSEP1);
         printf("strdyn_implode(ar, '%c') = \"%s\"\n", TESTSEP, s);          printf("strdyn_implode(ar1, '%c') = \"%s\"\n", TESTSEP1, s);
   
           ar_join = strdyn_join(ar1, ar2);
           ar_intersect = strdyn_intersect(ar1, ar2);
   
           i = 0;
           while (ar_join[i] != NULL) {
                   printf("ar_join[%d] = \"%s\"\n", i, ar_join[i]);
                   i++;
           }
   
           i = 0;
           while (ar_intersect[i] != NULL) {
                   printf("ar_intersect[%d] = \"%s\"\n", i, ar_intersect[i]);
                   i++;
           }
   
           puts("strdyn_free(ar1)");
           strdyn_free(ar1);
   
           puts("strdyn_free(ar2)");
           strdyn_free(ar2);
   
           puts("strdyn_free(ar_join)");
           strdyn_free(ar_join);
   
         puts("strdyn_free(ar)");          puts("strdyn_free(ar_intersect)");
         strdyn_free(ar);          strdyn_free(ar_intersect);
   
         puts("free(s)");          puts("free(s)");
         free(s);          free(s);

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.2

Platon Group <platon@platon.org> http://platon.org/
Copyright © 2002-2006 Platon Group
Site powered by Metafox CMS
Go to Top