Created
August 2, 2012 10:54
-
-
Save pechorin/3236224 to your computer and use it in GitHub Desktop.
learning c :D
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> | |
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