Skip to content

Instantly share code, notes, and snippets.

@pechorin
Created August 2, 2012 10:54
Show Gist options
  • Save pechorin/3236224 to your computer and use it in GitHub Desktop.
Save pechorin/3236224 to your computer and use it in GitHub Desktop.
learning c :D
#include <stdio.h>
#include <stdlib.h>
struct db_element {
int id;
char* key;
char* value;
void* next;
struct db_element_collection* db;
};
typedef struct db_element DB_ELEMENT;
struct db_element_collection {
int size;
struct db_element* first;
struct db_element* last;
};
typedef struct db_element_collection DB;
// init new DB
DB* DB_init(void) {
DB* db = malloc(sizeof(DB));
db -> size = 0;
return db;
};
// create new DB_ELEMENT in DB
DB_ELEMENT* DB_create_element(DB* _db, char* _key, char* _value) {
// allocate new object
DB_ELEMENT* element = malloc(sizeof(DB_ELEMENT));
// set db
element -> db = _db;
// set values
element -> key = _key;
element -> value = _value;
// assign first element in DB if needed
if (element -> db -> size == 0) {
element -> db -> first = element;
} else {
element -> db -> last -> next = (void*) element;
}
// assign last
element -> db -> last = element;
// increase DB size
element -> db -> size = (element -> db -> size + 1);
// assign id
element -> id = element -> db -> size;
return element;
};
// get next element
DB_ELEMENT* DB_get_next(DB_ELEMENT* element) {
return (DB_ELEMENT*)(element -> next);
};
// find element in db by key
DB_ELEMENT* DB_find_by_key(DB* _db, char* _search_key) {
DB_ELEMENT* current = NULL;
DB_ELEMENT* result = NULL;
if (_db -> first) {
current = _db -> first;
}
while (current) {
if (current -> key == _search_key) {
result = current;
break;
} else {
DB_ELEMENT* _next = DB_get_next(current);
if (_next) {
current = _next;
} else {
break;
}
}
}
return result;
}
void DB_DEBUG_find_by_key(DB* _db, char* _search_key) {
DB_ELEMENT* result = DB_find_by_key(_db, _search_key);
if (result != NULL) {
printf("search result for key [%s] -> %s\n", _search_key, result -> value);
} else {
printf("result not found for key [%s]\n", _search_key);
}
}
// seed data
void DB_create_test_data(DB* _db) {
DB_create_element(_db, "andrey", "3112142");
DB_create_element(_db, "anton", "2343434");
DB_create_element(_db, "stepa", "304394943");
DB_create_element(_db, "sergey", "494949499");
DB_create_element(_db, "vera", "393939");
}
int main(void) {
DB* db = DB_init();
DB_create_test_data(db);
DB_DEBUG_find_by_key(db, "anton");
DB_DEBUG_find_by_key(db, "kilogramm");
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment