Sponsored Content
Top Forums Programming Help on digestion of C header files for a short program. Post 302836201 by Corona688 on Tuesday 23rd of July 2013 06:11:23 PM
Old 07-23-2013
What they're doing is a mess of defines to declare different structures depending on what types and sizes you ask for, to make an efficient hardcoded hashtable. It's like C++ templates done by hand with nothing but messes of defines calling defines calling defines.

The header includes an example which I will try and comment and clarify for you.

Code:
#include "khash.h"

// Declares a hash map with integer keys and character values.
// "32" seems to be a name, not a size.  It'd actually become kh_struct_something_something_32 or such.
KHASH_MAP_INIT_INT(32, char)

int main() {
        int ret, is_missing;
        khiter_t k;
        // Declares a pointer to a hash table, and allocates it
        khash_t(32) *h = kh_init(32);
        // Insert key 5 into the table, get index in k
        k = kh_put(32, h, 5, &ret);
        // Set index k to value 10
        kh_value(h, k) = 10;
        // Look up key 10 in the hash table
        // We inserted key 5, so it ought to be missing.
        k = kh_get(32, h, 10);
        // If it's missing, it will equal kh_end.         
        is_missing = (k == kh_end(h));
        // Loopk up key 5, which we inserted earlier.       
        k = kh_get(32, h, 5);
        // Delete it.
        kh_del(32, h, k);
        // Loop from beginning to end.
        for (k = kh_begin(h); k != kh_end(h); ++k)
                // Set all existing values to 1.
                if (kh_exist(h, k)) kh_value(h, k) = 1;

        // Free the hash table.
        kh_destroy(32, h);
        return 0;
}


Last edited by Corona688; 07-23-2013 at 07:21 PM..
 

10 More Discussions You Might Find Interesting

1. Programming

C language Header files

Hi people I'm trying to do a school project and I've a situation wich is bothering me, imagine We've a program and that programs devided in multiple files "dotC1.c" and "dotC2.c" (for example) and they include our own header "header.h", and if We are using some libraries int both files it would... (2 Replies)
Discussion started by: pharaoh
2 Replies

2. UNIX for Dummies Questions & Answers

Merge Files into Single with Header

Hi All, I am trying to merge all files in a directory that end in *.txt to a single file with the contents one after the other. This I can do using the cat function but how do I put the name of the file as a header for each one in the combined single file and seperate the contents from each... (2 Replies)
Discussion started by: pcg
2 Replies

3. UNIX for Dummies Questions & Answers

Merge all csv files in one folder considering only 1 header row and ignoring header of all others

Friends, I need help with the following in UNIX. Merge all csv files in one folder considering only 1 header row and ignoring header of all other files. FYI - All files are in same format and contains same headers. Thank you (4 Replies)
Discussion started by: Shiny_Roy
4 Replies

4. UNIX for Dummies Questions & Answers

Short Program for Checking Server date

Hi Guys, Good morning! I have a file which looks something like this: Command was launched from partition 0. ------------------------------------------------ Executing command in server server3 Thu Jan 12 11:10:39 EET 2012 ------------------------------------------------... (3 Replies)
Discussion started by: rymnd_12345
3 Replies

5. Shell Programming and Scripting

Short program to select lines from a file based on a second file

Hello, I use UBUNTU 12.04. I want to write a short program using awk to select some lines in a file based on a second file. My first file has this format with about 400,000 lines and 47 fields: SNP1 1 12.1 SNP2 1 13.2 SNP3 1 45.2 SNP4 1 23.4 My second file has this format: SNP2 SNP3... (1 Reply)
Discussion started by: Homa
1 Replies

6. UNIX for Dummies Questions & Answers

Short Mail Program Help

Hi, I have been out of the loop with my UNIX/Linux for several years and have been working mainframe. I was trying to create a short two line program to create a list of email addresses as a variable and then send the list a file. Here is what I did and I thought that is was right, but I am... (3 Replies)
Discussion started by: jbrider
3 Replies

7. UNIX for Dummies Questions & Answers

Kernel Header Files

I'm trying to lookup the definition of the ext4 superblock schedule in the kernel header files, but I can't seem to locate the files. I'm running the most recent Raspian Debian Wheezy OS with kernel version 3.18. Any help is greatly appreciated. Thank you!! (1 Reply)
Discussion started by: ksmarine1980
1 Replies

8. Shell Programming and Scripting

Remove files having 0 byte or only header

Hi Team, I'm looking for a command which removes files having 0 byte of having only header line (1 line). My ETL process generates these files. Few files are not having header, in that case if no data from source, it will be 0 byte and few files are having header, in that case if no data from... (7 Replies)
Discussion started by: ace_friends22
7 Replies

9. Programming

Where to get C header files?

Some of my c code compiles fine but others can't find header files. Colored_Chars.c:4:10: fatal error: graphics.h: No such file or directory Do I need to download them from some where? I found this. Is this what I need to do? Under Using DSL libraries - How do I use graphics.h in... (3 Replies)
Discussion started by: drew77
3 Replies

10. Shell Programming and Scripting

Find header in a text file and prepend it to all lines until another header is found

I've been struggling with this one for quite a while and cannot seem to find a solution for this find/replace scenario. Perhaps I'm getting rusty. I have a file that contains a number of metrics (exactly 3 fields per line) from a few appliances that are collected in parallel. To identify the... (3 Replies)
Discussion started by: verdepollo
3 Replies
hsearch(3C)															       hsearch(3C)

NAME
hsearch(), hcreate(), hdestroy() - manage hash search tables SYNOPSIS
DESCRIPTION
is a hash-table search routine generalized from Knuth (6.4) Algorithm D. It returns a pointer into a hash table indicating the location at which an entry can be found. Only pointers are copied, so the calling routine must store the data (the value of the "key" must be unique). item is a structure of type (defined in the header file) containing two pointers: points to the comparison key, and points to any other data to be associated with that key. (Pointers to types other than character should be cast to pointer-to-character.) action is a member of an enumeration type indicating the disposition of the entry if it cannot be found in the table. indicates that the item should be inserted in the table at an appropriate point. indicates that no entry should be made. Unsuccessful resolution is indicated by the return of a NULL pointer. allocates sufficient space for the table, and must be called before is used. nel is an estimate of the maximum number of entries that the table will contain. This number can be adjusted upward by the algorithm in order to obtain certain mathematically favorable circumstances. destroys the search table, and can be followed by another call to EXAMPLE
The following example reads in strings followed by two numbers and stores them in a hash table, discarding duplicates. It then reads in strings and finds the matching entry in the hash table and prints it out. #include <stdio.h> #include <search.h> struct info { /* this is the info stored in the table */ int age, room; /* other than the key. */ }; #define NUM_EMPL 5000 /* # of elements in search table */ main( ) { /* space to store strings */ char string_space[NUM_EMPL*20]; /* space to store employee info */ struct info info_space[NUM_EMPL]; /* next avail space in string_space */ char *str_ptr = string_space; /* next avail space in info_space */ struct info *info_ptr = info_space; ENTRY item, *found_item, *hsearch( ); /* name to look for in table */ char name_to_find[30]; int i = 0; /* create table */ (void) hcreate(NUM_EMPL); while (scanf("%s%d%d", str_ptr, &info_ptr->age, &info_ptr->room) != EOF && i++ < NUM_EMPL) { /* put info in structure, and structure in item */ item.key = str_ptr; item.data = (char *)info_ptr; str_ptr += strlen(str_ptr) + 1; info_ptr++; /* put item into table */ (void) hsearch(item, ENTER); } /* access table */ item.key = name_to_find; while (scanf("%s", item.key) != EOF) { if ((found_item = hsearch(item, FIND)) != NULL) { /* if item is in the table */ (void)printf("found %s, age = %d, room = %d ", found_item->key, ((struct info *)found_item->data)->age, ((struct info *)found_item->data)->room); } else { (void)printf("no such employee %s ", name_to_find); } } } RETURN VALUE
returns a NULL pointer if either the action is and the item could not be found or the action is and the table is full. returns zero if it cannot allocate sufficient space for the table. WARNINGS
and use to allocate space (see malloc(3C)). Only one hash search table can be active at any given time. SEE ALSO
bsearch(3C), lsearch(3C), malloc(3C), string(3C), tsearch(3C), thread_safety(5). STANDARDS CONFORMANCE
hsearch(3C)
All times are GMT -4. The time now is 07:00 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy