15 void printLinkedList(struct Node *node);
16 void append(struct Node** head_ref, int new_data);
17 void freeList(struct Node** head_ref);
19 /****************************************************************************
20 * Attempts to extend the dimension of the affine space by one dimension.
21 * The affine space is specified by
22 * the first 'k' columns of the 'n'x'n' matrix 'G', translated by 'h',
23 * that will be extended to include the vector 'xi'. 'GBar' is 'G^(-1)^T'.
24 ****************************************************************************/
26 void extend(int n, int *k, int *h, int **G, int **GBar, int *xi) {
30 struct Node* setS = NULL;
31 struct Node* setT = NULL;
32 struct Node* setWalker = NULL;
37 if(dotProductMod(xi, GBar[a], n, 2) == 1) {
41 unsigned int firstT = 1; // set initially to true
43 if(dotProductMod(xi, GBar[a], n, 2) == 1) {
59 return; // xi is in the linear space so do nothing
63 while(setWalker != NULL) {
64 // update GBar rows, gbar
66 GBar[setWalker->data][a] = (GBar[setWalker->data][a] + GBar[i][a])%2;
69 G[i][a] = (G[i][a] + G[setWalker->data][a])%2;
71 setWalker = setWalker->next;
94 void append(struct Node** head_ref, int new_data)
96 struct Node* new_node = (struct Node*) malloc(sizeof(struct Node));
97 struct Node *last = *head_ref;
99 new_node->data = new_data;
100 new_node->next = NULL;
102 // if the linked list is empty, then make the new node as head
103 if (*head_ref == NULL) {
104 *head_ref = new_node;
108 // else traverse till the last node
109 while (last->next != NULL) {
112 last->next = new_node;
117 /*void freeList(struct Node** head_ref)
120 struct Node *second_last_walker = *head_ref;
121 struct Node *walker = *head_ref;
123 // else traverse till the last node
125 while(walker->next != NULL) {
126 while(walker->next != NULL) {
127 //printf("!%d\n", walker->data);
128 second_last_walker = walker;
129 walker = walker->next;
130 //printf("%d\n", walker->data);
131 //printf("!%d\n", second_last_walker->data);
134 second_last_walker->next = NULL;
136 //printf("!!%d\n", second_last_walker->data);
144 void freeList(struct Node** head_ref)
147 struct Node *walker = *head_ref;
148 struct Node *walker2;
150 // else traverse till the last node
152 walker2 = walker->next;
153 while(walker2 != NULL) {
156 walker2 = walker->next;
165 void printLinkedList(struct Node *node)
172 printf(" %d ", node->data);