From 4f9181b25b83d89cc4d095ba3602aa017ae20e18 Mon Sep 17 00:00:00 2001 From: Kacper Donat Date: Fri, 14 Dec 2018 20:12:41 +0100 Subject: [PATCH] aktualizacja --- index.c | 2 ++ index.h | 2 ++ openidx.c | 19 +++++++++++++++++++ 3 files changed, 23 insertions(+) diff --git a/index.c b/index.c index 56cce17..1c381f8 100644 --- a/index.c +++ b/index.c @@ -636,6 +636,8 @@ bool btree_update(btree_t *tree, record_key_t key, record_t record) return false; } + tape_write(tree->main, entry.location, &record, sizeof(record)); + return true; } diff --git a/index.h b/index.h index a98abdc..12665d9 100644 --- a/index.h +++ b/index.h @@ -5,6 +5,7 @@ #include "record.h" #include "tape.h" #include +#include #define SIZEOF_ENTRIES(n) (sizeof(btree_node_header_t) + (sizeof(btree_entry_t) - sizeof(page_t))*(n) + ((n) > 0 ? 1 : 0) * sizeof(page_t)) #define NODE_SIZE(node) SIZEOF_ENTRIES(node->header.entries) @@ -74,6 +75,7 @@ int btree_open(btree_t *tree, char* filename); page_t btree_insert(btree_t *tree, record_t record); page_t btree_remove(btree_t *tree, record_key_t key); +bool btree_update(btree_t *tree, record_key_t key, record_t record); page_t btree_find(btree_t *tree, record_key_t key, btree_entry_t *entry, btree_node_t *node, unsigned *index); btree_entry_t *btree_get_entry(btree_node_t* node, unsigned n); diff --git a/openidx.c b/openidx.c index db757cc..6e7dbcc 100644 --- a/openidx.c +++ b/openidx.c @@ -64,6 +64,7 @@ result_t records_command(const char* command, char* args); result_t find_command(const char* command, char* args); result_t read_command(const char* command, char* args); result_t delete_command(const char* command, char* args); +result_t update_command(const char* command, char* args); result_t verbosity_command(const char* command, char* args); static command_t commands[] = { @@ -76,6 +77,7 @@ static command_t commands[] = { { "find", "Finds record", find_command }, { "read", "Reads record", read_command }, { "delete", "Deletes record", delete_command }, + { "update", "Updates record", update_command }, { "verbosity", "Changes the verbosity", verbosity_command }, }; @@ -188,6 +190,23 @@ result_t delete_command(const char* command, char* args) return RESULT_OK; } +result_t update_command(const char* command, char* args) +{ + record_t record; + + if (sscanf(args, "%u %lf %lf", &record.key, &record.x, &record.y) == 3) { + if (btree_update(&tree, record.key, record)) { + printf("Record %u updated.\n", record.key); + } else { + printf("404 Not found\n"); + } + } else { + printf("Usage: find key\n"); + } + + return RESULT_OK; +} + result_t records_command(const char* command, char* args) { page_t page;