⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 opal_hash_table.c

📁 MPI stands for the Message Passing Interface. Written by the MPI Forum (a large committee comprising
💻 C
字号:
/* * Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana *                         University Research and Technology *                         Corporation.  All rights reserved. * Copyright (c) 2004-2005 The University of Tennessee and The University *                         of Tennessee Research Foundation.  All rights *                         reserved. * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,  *                         University of Stuttgart.  All rights reserved. * Copyright (c) 2004-2005 The Regents of the University of California. *                         All rights reserved. * $COPYRIGHT$ *  * Additional copyrights may follow *  * $HEADER$ */#include "ompi_config.h"#ifdef HAVE_STDINT_H#include <stdint.h>#endif#include <string.h>#include "support.h"#include "opal/class/opal_object.h"#include "opal/class/opal_hash_table.h"#include "opal/runtime/opal.h"static FILE *error_out=NULL;char *num_keys[] = {    "1234", "1234",    "5678", "5678",    "12450", "12450",    "45623", "45623",    NULL};char *str_keys[] = {    "foo", "bar",    "2", "this cow jumped over the moon",    "this is another key", "this is another value",    "key key", "value value",    NULL};char *perm_keys[] = {    "abcdef", "abcdef",    "bcdefa", "bcdefa",    "cdefab", "cdefab",    "defabc", "defabc",    "efabcd", "efabcd",    "fabcde", "fabcde",    "badcfe", "badcfe",    "badcef", "badcef",    "abdcfe", "abdcfe",    "bcdaef", "bcdaef",    NULL};typedef union {    uint32_t uvalue;    void *vvalue;} value_t;static void validate_table(opal_hash_table_t *table, char *keys[], int is_numeric_keys){    int         j, ret;    value_t value;        for ( j = 0; keys[j]; j += 2) {        if ( 1 == is_numeric_keys ) {            ret = opal_hash_table_get_value_uint32(table, atoi(keys[j]),                                                   (void**) &value.uvalue);        } else {            ret = opal_hash_table_get_value_ptr(table, keys[j],                                                 strlen(keys[j]),                                                 &value.vvalue);        }        test_verify_str(keys[j+1], value.vvalue);    }    test_verify_int(j/2, opal_hash_table_get_size(table));}static void test_htable(opal_hash_table_t *table){    int j;    fprintf(error_out, "\nTesting integer keys...\n");    for ( j = 0; num_keys[j]; j += 2)    {        opal_hash_table_set_value_uint32(table, atoi(num_keys[j]), num_keys[j+1]);    }    validate_table(table, num_keys, 1);        /* remove all values for next test */    opal_hash_table_remove_all(table);    test_verify_int(0, opal_hash_table_get_size(table));        fprintf(error_out, "\nTesting string keys...\n");    for ( j = 0; str_keys[j]; j += 2)    {        opal_hash_table_set_value_ptr(table, str_keys[j], strlen(str_keys[j]), str_keys[j+1]);    }    validate_table(table, str_keys, 0);        /* remove all values for next test */    opal_hash_table_remove_all(table);    test_verify_int(0, opal_hash_table_get_size(table));        fprintf(error_out, "\nTesting collision resolution...\n");    /* All of the string keys in keys array should        have the same hash value. */    for ( j = 0; perm_keys[j]; j += 2)    {        opal_hash_table_set_value_ptr(table, perm_keys[j], strlen(perm_keys[j]), perm_keys[j+1]);    }    validate_table(table, perm_keys, 0);        /* remove all values for next test */    opal_hash_table_remove_all(table);    test_verify_int(0, opal_hash_table_get_size(table));        fprintf(error_out, "\n\n");}static void test_dynamic(void){    opal_hash_table_t     *table;        table = OBJ_NEW(opal_hash_table_t);    if ( NULL == table )    {        fprintf(error_out, "Error: Unable to create hash table.\n");        exit(-1);    }    fprintf(error_out, "Testing with dynamically created table...\n");    opal_hash_table_init(table, 4);    test_htable(table);        OBJ_RELEASE(table);}static void test_static(void){    opal_hash_table_t     table;        OBJ_CONSTRUCT(&table, opal_hash_table_t);    opal_hash_table_init(&table, 128);    fprintf(error_out, "Testing with statically created table...\n");    test_htable(&table);    OBJ_DESTRUCT(&table);}int main(int argc, char **argv){    opal_init();    /* local variables */    test_init("opal_hash_table_t");#ifdef STANDALONE    error_out = stderr;#else    error_out = fopen( "./opal_hash_table_test_out.txt", "w" );    if( error_out == NULL ) error_out = stderr;#endif        test_dynamic();    test_static();#ifndef STANDALONE    fclose( error_out );#endif    opal_finalize();        return test_finalize();}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -