Created
July 30, 2011 22:08
-
-
Save ashgti/1116058 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
No Results | |
DatabaseError: Databased failed | |
Recieved Results 2: | |
0: abc | |
1: abc | |
Done |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdio.h> | |
#include <stdlib.h> | |
/* Data QueryResult = NoResult | DatabaseError String | Results [String] */ | |
enum {NoResult, DatabaseError, Results}; | |
struct QueryResult { | |
int type; | |
union { | |
char* error_msg; | |
struct { | |
char** msgs; | |
int len; | |
} results; | |
}; | |
}; | |
void noResult(struct QueryResult* results) { | |
results->type = NoResult; | |
} | |
void databaseError(struct QueryResult* results) { | |
results->type = DatabaseError; | |
results->error_msg = "Databased failed\n"; | |
} | |
void success(struct QueryResult* query_results) { | |
int i=0; | |
query_results->type = Results; | |
query_results->results.msgs = malloc(sizeof(char*) * 2); | |
for (i=0;i<2;i++) { | |
query_results->results.msgs[i] = "abc"; | |
} | |
query_results->results.len = 2; | |
} | |
void printQueryResult(struct QueryResult* query_results) { | |
switch (query_results->type) { | |
case NoResult: | |
printf("No Results\n"); | |
break; | |
case DatabaseError: | |
printf("DatabaseError: %s", query_results->error_msg); | |
break; | |
case Results: | |
printf("Recieved Results %d:\n", query_results->results.len); | |
int i; | |
for (i = 0; i < query_results->results.len; i++) { | |
printf(" %d: %s\n", i, query_results->results.msgs[i]); | |
} | |
break; | |
} | |
} | |
void freeQuery(struct QueryResult* query_results) { | |
if (query_results->type == Results) { | |
free(query_results->results.msgs); | |
} | |
} | |
int main(int argc, char** argv) { | |
struct QueryResult query; | |
noResult(&query); | |
printQueryResult(&query); | |
databaseError(&query); | |
printQueryResult(&query); | |
success(&query); | |
printQueryResult(&query); | |
freeQuery(&query); | |
printf("Done\n"); | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment