From 5162d972fb9dd7597c48caac181083d9f610de9d Mon Sep 17 00:00:00 2001 From: Kolan Sh Date: Thu, 19 May 2011 18:55:40 +0400 Subject: [PATCH] libhash_ex --- .hgignore | 7 +++ c/gprof_ex/collatz.c | 55 ++++++++++++++++++++++ c/libhash_ex/Makefile | 83 ++++++++++++++++++++++++++++++++++ c/libhash_ex/libhash_ex | Bin 0 -> 11231 bytes c/libhash_ex/libhash_ex.c | 67 +++++++++++++++++++++++++++ c/libhash_ex/libhash_ex.geany | 21 +++++++++ 6 files changed, 233 insertions(+) create mode 100644 .hgignore create mode 100644 c/gprof_ex/collatz.c create mode 100644 c/libhash_ex/Makefile create mode 100755 c/libhash_ex/libhash_ex create mode 100644 c/libhash_ex/libhash_ex.c create mode 100644 c/libhash_ex/libhash_ex.geany diff --git a/.hgignore b/.hgignore new file mode 100644 index 0000000..3e69407 --- /dev/null +++ b/.hgignore @@ -0,0 +1,7 @@ +syntax: glob +*.o +*.swp +*.gch +*.gcno +*.out +callgrind.out.* diff --git a/c/gprof_ex/collatz.c b/c/gprof_ex/collatz.c new file mode 100644 index 0000000..11c8cd4 --- /dev/null +++ b/c/gprof_ex/collatz.c @@ -0,0 +1,55 @@ +#include + +/* Computes the length of Collatz sequences */ + +unsigned int +step (unsigned int x) +{ + if (x % 2 == 0) + { + return (x / 2); + } + else + { + return (3 * x + 1); + } +} + +unsigned int +nseq (unsigned int x0) +{ + unsigned int i = 1, x; + + if (x0 == 1 || x0 == 0) + return i; + + x = step (x0); + + while (x != 1 && x != 0) + { + x = step (x); + i++; + } + + return i; +} + +int +main (void) +{ + unsigned int i, m = 0, im = 0; + + for (i = 1; i < 500000; i++) + { + unsigned int k = nseq (i); + + if (k > m) + { + m = k; + im = i; + printf ("sequence length = %u for %u\n", m, im); + } + } + + return 0; +} diff --git a/c/libhash_ex/Makefile b/c/libhash_ex/Makefile new file mode 100644 index 0000000..6957597 --- /dev/null +++ b/c/libhash_ex/Makefile @@ -0,0 +1,83 @@ +CC=cc +CXX=c++ +INCLUDE=-I$(HOME)/projects/include +KOLAN_PROJECTS=$(HOME)/projects +KOLAN_INCLUDE=$(KOLAN_PROJECTS)/include + +# Compiler flags +# if mode variable is empty, setting debug build mode +ifeq ($(mode),) + mode = debug +endif +ifeq ($(mode),debug) + CFLAGS = -O0 -g -std=c99 -pedantic -Wextra -Wconversion + LDFLAGS = +endif +ifeq ($(mode),profile) + CFLAGS = -O0 -g -p -ftest-coverage -Wcoverage-mismatch + LDFLAGS = -g -p +endif +ifeq ($(mode),develop) + CFLAGS += -O2 -g + LDFLAGS += -O1 +endif +ifeq ($(mode),release) + CFLAGS += -O2 + LDFLAGS += -O1 +endif + +CFLAGS += -Wall +# $(shell pkg-config --cflags libhash) +LDFLAGS += -Wall -lhash +# $(shell pkg-config --libs libhash) + +all: libhash_ex + +ifneq ($(mode),debug) +ifneq ($(mode),profile) +ifneq ($(mode),develop) +ifneq ($(mode),release) + @echo "Invalid build mode." + @echo "Please use 'make mode=release' or 'make mode=develop' or 'make mode=debug'" + @exit 1 +endif +endif +endif +endif + @echo ".........................." + @echo "Building on "$(mode)" mode " + @echo "CFLAGS=$(CFLAGS)" + @echo "LDLAGS=$(LDFLAGS)" + @echo ".........................." + +%.o : + $(CC) -c $(CFLAGS) $(LDFLAGS) $(INCLUDE) -o $@ $< + +libhash_ex: libhash_ex.o + $(CC) $(CFLAGS) $(LDFLAGS) $(INCLUDE) -o $@ libhash_ex.o + +libhash_ex.o: libhash_ex.[c,h] mpool.o + +mpool.o: $(KOLAN_INCLUDE)/mpool.[c,h] xerror.o + +netfuncs.o: $(KOLAN_INCLUDE)/netfuncs.[c,h] + +listen.o: listen.[c,h] params.h xerror.o + +cfg_files.o: cfg_files.[c,h] ssdparser.o + +request.o: request.[c,h] ssdparser.o + +ssdparser.o: $(KOLAN_PROJECTS)/multiexpat/inc/ssdparser.[c,h] $(KOLAN_INCLUDE)/c_const.h \ + $(KOLAN_INCLUDE)/map1251.h $(KOLAN_INCLUDE)/insys_parser/tags.h $(KOLAN_INCLUDE)/insys_parser/const.h xmalloc.o + +xmalloc.o: $(KOLAN_INCLUDE)/xmalloc.[c,h] xerror.o + +signals.o: signals.[c,h] xerror.o + +xerror.o: $(KOLAN_INCLUDE)/xerror.[c,h] + +clean: + $(RM) *.o *.out callgrind.out.* *.gcno dataserver echo-client + +.PHONY: all clean diff --git a/c/libhash_ex/libhash_ex b/c/libhash_ex/libhash_ex new file mode 100755 index 0000000000000000000000000000000000000000..a45c2cef9770facfd6be8389f0dd14bcd8f46571 GIT binary patch literal 11231 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 + +#include +#include +#include + +#define MAX_CHANNUM 1024 + +u_int32_t hash_function(void *key, u_int32_t number_of_buckets) +{ +// return hash_hash_int(key, number_of_buckets); + + return hash_hash_string(key, number_of_buckets); // вызывается по-умолчанию, если hash_function=NULL в hash_initialise() +} + +int compare_keys(void *key1, void *key2) +{ +// return hash_compare_int(key1, key2); + + return hash_compare_string(key1, key2); // вызывается по-умолчанию, если compare_keys=NULL в hash_initialise() +} + +int duplicate_key(void **destination, void *source) +{ +// hash_copy_int(destination, source); + + hash_copy_string(destination, source); // вызывается по умолчанию, если duplicate_key=NULL в hash_initialise() + + return 0; +} + +void free_key(void *key) +{ + void *warnings_stub = key; + warnings_stub = warnings_stub; +} + +void free_value(void *value) +{ + void *warnings_stub = value; + warnings_stub = warnings_stub; +} + +int main() +{ + u_int32_t nch = 5; + + struct hash h; + + //~ hash_initialise(&h, 2 * nch, NULL, NULL, NULL, NULL, NULL); // пример работы с ключом-строкой + + hash_initialise(&h, 2 * nch, hash_function, compare_keys, duplicate_key, free_key, free_value); + + hash_insert(&h, "Shashkin", "Kolan"); + hash_insert(&h, "Iljin", "Egor"); + hash_insert(&h, "Korsakov", "Kostya"); + hash_insert(&h, "Sinelnikov", "Alexandr"); + hash_insert(&h, "Kochetkov", "Sergey"); + hash_insert(&h, "Bovykin", "Sergey"); + hash_insert(&h, "Novikov", "Alexey"); + + char *val_ptr; + hash_retrieve(&h, "Kochetkov", (void **)&val_ptr); + printf("Kochetkov = %s\n", val_ptr); + hash_deinitialise(&h); + return 0; +} diff --git a/c/libhash_ex/libhash_ex.geany b/c/libhash_ex/libhash_ex.geany new file mode 100644 index 0000000..8257bc6 --- /dev/null +++ b/c/libhash_ex/libhash_ex.geany @@ -0,0 +1,21 @@ + +[indentation] +indent_width=8 +indent_type=1 +indent_hard_tab_width=8 +detect_indent=false +indent_mode=2 + +[project] +name=libhash_ex +base_path=/home/kolan/dev/c/libhash_ex/ + +[long line marker] +long_line_behaviour=1 +long_line_column=72 + +[files] +current_page=2 +FILE_NAME_0=532;C;0;16;1;1;1;/home/kolan/dev/c/libhash_ex/libhash_ex.c;0 +FILE_NAME_1=204;C;0;16;1;1;1;/usr/include/hash.h;0 +FILE_NAME_2=0;Make;0;16;1;1;1;/home/kolan/dev/c/libhash_ex/Makefile;0