Skip to content

Instantly share code, notes, and snippets.

@ashgti
Created July 30, 2011 22:08
Show Gist options
  • Save ashgti/1116058 to your computer and use it in GitHub Desktop.
Save ashgti/1116058 to your computer and use it in GitHub Desktop.
No Results
DatabaseError: Databased failed
Recieved Results 2:
0: abc
1: abc
Done
#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