#include <stdio.h>
#include <stdlib.h>
#include "comb.h"
#include "error.h"
#include "standard.h"
Go to the source code of this file.
Functions | |
combinations * | new_combinations (int numbers[], int n, int r) |
int | incr (int *x, int n, int r) |
int * | next_combination (combinations *bob) |
void | close_combinations (combinations *bob) |
|
Definition at line 108 of file comb.c. References combinations::curr, combinations::next, combinations::numbers, and combinations::x. Referenced by multiplex(). 00112 { 00113 if (bob != NULL) { 00114 if (bob->numbers != NULL) 00115 free(bob->numbers); 00116 if (bob->curr != NULL) 00117 free(bob->curr); 00118 if (bob->next != NULL) 00119 free(bob->next); 00120 if (bob->x != NULL) 00121 free(bob->x); 00122 free(bob); 00123 } 00124 }
|
|
Definition at line 55 of file comb.c. References incr(). 00060 { 00061 int tmp; 00062 00063 if (r <= 0) { 00064 return (0); 00065 } 00066 else if (r == 1) { 00067 return (++x[0] < n); 00068 } 00069 else { 00070 if (++x[r-1] >= n) { 00071 tmp = incr(x, n-1, r-1); 00072 x[r-1] = x[r-2]+1; 00073 return(tmp); 00074 } 00075 else { 00076 return(1); 00077 } 00078 } 00079 }
|
|
Definition at line 7 of file comb.c. References combinations::curr, error(), combinations::last, combinations::n, combinations::next, combinations::numbers, combinations::r, and combinations::x. Referenced by multiplex(). 00013 { 00014 int i; 00015 combinations *bob = (combinations *) malloc(sizeof(combinations)); 00016 if (bob != NULL) { 00017 bob->n = n; 00018 bob->r = r; 00019 bob->numbers = (int *) malloc(n * sizeof(int)); 00020 00021 if ((bob->numbers==NULL) && (n>0)) 00022 error("new_combinations", "malloc failed.."); 00023 else { 00024 for (i=0; i<n; i++) 00025 bob->numbers[i] = numbers[i]; 00026 } 00027 00028 bob->curr = (int *) malloc(r * sizeof(int)); 00029 bob->next = (int *) malloc(r * sizeof(int)); 00030 if (((bob->curr == NULL) || (bob->next == NULL)) && (r > 0)) { 00031 error("new_combinations", "malloc failed..."); 00032 } 00033 else { 00034 for (i=0; i<r; i++) 00035 bob->next[i] = i; 00036 } 00037 00038 bob->x = (int *) malloc(r * sizeof(int)); 00039 if ((bob->x == NULL)&&(r>0)) { 00040 error("new_combinations", "malloc failed...."); 00041 } 00042 else { 00043 for (i=0; i<r; i++) 00044 bob->x[i] = bob->numbers[i]; 00045 } 00046 bob->last = 0; 00047 } 00048 else { 00049 error("new_combinations", "malloc failed."); 00050 } 00051 return (bob); 00052 }
|
|
Definition at line 82 of file comb.c. References combinations::curr, incr(), combinations::last, combinations::n, combinations::next, combinations::numbers, combinations::r, warn(), and combinations::x. Referenced by multiplex(). 00087 { 00088 int *this = NULL; 00089 int i; 00090 if (bob != NULL) { 00091 if (!bob->last) { 00092 for (i=0; i<bob->r; i++) { 00093 bob->curr[i] = bob->next[i]; 00094 bob->x[i] = bob->numbers[bob->curr[i]]; 00095 } 00096 this = bob->x; 00097 if (!incr(bob->next, bob->n, bob->r)) 00098 bob->last = 1; 00099 } 00100 } 00101 else { 00102 warn("next_combination", "invalid combinations."); 00103 } 00104 return (this); 00105 }
|