/* Copyright 2013-14. Los Alamos National Security, LLC. This material was produced
* under U.S. Government contract DE-AC52-06NA25396 for Los Alamos National
* Laboratory (LANL), which is operated by Los Alamos National Security, LLC
* for the U.S. Department of Energy. The U.S. Government has rights to use,
* reproduce, and distribute this software. NEITHER THE GOVERNMENT NOR LOS
* ALAMOS NATIONAL SECURITY, LLC MAKES ANY WARRANTY, EXPRESS OR IMPLIED, OR
* ASSUMES ANY LIABILITY FOR THE USE OF THIS SOFTWARE. If software is modified
* to produce derivative works, such modified software should be clearly marked,
* so as not to confuse it with the version available from LANL.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy
* of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed
* under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
* CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*
* Under this license, it is required to include a reference to this work. We
* request that each derivative work contain a reference to LANL Copyright
* Disclosure C14043/LA-CC-14-003 so that this work's impact can be roughly
* measured. In addition, it is requested that a modifier is included as in
* the following example:
*
* //<Uses | improves on | modified from> LANL Copyright Disclosure C14043/LA-CC-14-003
*
* This is LANL Copyright Disclosure C14043/LA-CC-14-003
*/
#undef UNDEFINED
#ifdef UNDEFINED
/**
* @file hash.hm
* @author Peter Ahrens
* @date Thu Jun 6 2013
*/
#endif
#define BASE_HASH_DECLARE(NAME, MODIFIER, KEY_TYPE, VALUE_TYPE)\
\
int NAME##MODIFIER##Hash_CreateFactory(NAME##Hash_Factory *factory, int hashIndex);\
\
int NAME##MODIFIER##Hash_DestroyFactory(NAME##Hash_Factory *factory, int hashIndex);\
\
NAME##Hash_Table *NAME##MODIFIER##Hash_CreateTable(NAME##Hash_Factory* factory, int hashIndex, size_t keyRange, size_t numEntries, float loadFactor);\
\
int NAME##MODIFIER##Hash_InitTable(NAME##Hash_Table *table, va_list args);\
\
int NAME##MODIFIER##Hash_DestroyTable(NAME##Hash_Table *table);\
\
char *NAME##MODIFIER##Hash_Report(NAME##Hash_Table *table);\
\
int NAME##MODIFIER##Hash_SetupTable(NAME##Hash_Table *table);\
\
int NAME##MODIFIER##Hash_EmptyTable(NAME##Hash_Table *table);\
\
int NAME##MODIFIER##Hash_Query(NAME##Hash_Table *table, size_t numKeys, KEY_TYPE *keys, VALUE_TYPE *valuesOutput);\
\
int NAME##MODIFIER##Hash_QuerySingle(NAME##Hash_Table *table, KEY_TYPE key, VALUE_TYPE *valueOutput);\
\
int NAME##MODIFIER##Hash_Insert(NAME##Hash_Table *table, size_t numEntries, KEY_TYPE *keys, VALUE_TYPE *values);\
\
int NAME##MODIFIER##Hash_InsertSingle(NAME##Hash_Table *table, KEY_TYPE key, VALUE_TYPE value);\
\
int NAME##MODIFIER##Hash_InsertNoOverwrite(NAME##Hash_Table *table, size_t numEntries, KEY_TYPE *keys, VALUE_TYPE *values);\
\
int NAME##MODIFIER##Hash_InsertSingleNoOverwrite(NAME##Hash_Table *table, KEY_TYPE key, VALUE_TYPE value);\
\
#define CL_HASH_DECLARE(NAME, MODIFIER, KEY_TYPE, VALUE_TYPE)\
\
BASE_HASH_DECLARE(NAME, MODIFIER##CL, KEY_TYPE, VALUE_TYPE)\
\
int NAME##MODIFIER##CLHash_BufferQuery(NAME##Hash_Table *table, size_t numKeys, cl_mem keysBuffer, cl_mem valuesOutputBuffer);\
\
int NAME##MODIFIER##CLHash_BufferInsert(NAME##Hash_Table *table, size_t numEntries, cl_mem keysBuffer, cl_mem valuesBuffer);\
\
int NAME##MODIFIER##CLHash_BufferInsertNoOverwrite(NAME##Hash_Table *table, size_t numEntries, cl_mem keysBuffer, cl_mem valuesBuffer);\
\
#define OPENMP_HASH_DECLARE(NAME, MODIFIER, KEY_TYPE, VALUE_TYPE)\
\
BASE_HASH_DECLARE(NAME, MODIFIER##OpenMP, KEY_TYPE, VALUE_TYPE)\
\
int NAME##MODIFIER##OpenMPHash_BufferQuery(NAME##Hash_Table *table, size_t numKeys, cl_mem keysBuffer, cl_mem valuesOutputBuffer);\
\
int NAME##MODIFIER##OpenMPHash_BufferInsert(NAME##Hash_Table *table, size_t numEntries, cl_mem keysBuffer, cl_mem valuesBuffer);\
\
int NAME##MODIFIER##OpenMPHash_BufferInsertNoOverwrite(NAME##Hash_Table *table, size_t numEntries, cl_mem keysBuffer, cl_mem valuesBuffer);\
\