//------------------------------------------------------------------------------
// GB_Template.h: definitions for Template methods
//------------------------------------------------------------------------------

// SuiteSparse:GraphBLAS, Timothy A. Davis, (c) 2017-2023, All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0

//------------------------------------------------------------------------------

#ifndef GB_TEMPLATE_H
#define GB_TEMPLATE_H

//------------------------------------------------------------------------------
// definitions that modify GraphBLAS.h
//------------------------------------------------------------------------------

#include "GB_dev.h"
#include "GB_compiler.h"
#include "GB_warnings.h"
#include "GB_coverage.h"
#define GB_LIBRARY

//------------------------------------------------------------------------------
// user-visible GraphBLAS.h
//------------------------------------------------------------------------------

#include "GraphBLAS.h"
#undef I

//------------------------------------------------------------------------------
// handle the restrict and 'static inline' keywords
//------------------------------------------------------------------------------

// Intentionally shadow the built-in "restrict" keyword.  See GraphBLAS.h for
// the definition of GB_restrict.  It becomes empty for C++, and "__restrict"
// for MS Visual Studio.  Otherwise, GB_restrict is just "restrict" on C11
// compliant compilers.  I prefer to use the "restrict" keyword to make the
// code readable.  This #define is a patch for compilers that don't support it:

#define restrict GB_restrict

// for internal static inline functions (will be redefined for CUDA)
#undef  GB_STATIC_INLINE
#define GB_STATIC_INLINE static inline

//------------------------------------------------------------------------------
// internal #include files
//------------------------------------------------------------------------------

#include "GB_prefix.h"
#include "GB_bytes.h"
#include "GB_defaults.h"
#include "GB_index.h"
#include "GB_complex.h"
#include "GB_pun.h"
#include "GB_atomics.h"
#include "GB_printf_kernels.h"
#include "GB_assert_kernels.h"
#include "GB_opaque.h"
#include "GB_math_macros.h"
#include "GB_binary_search.h"
#include "GB_zombie.h"
#include "GB_partition.h"
#include "GB_memory_macros.h"
#include "GB_werk.h"
#include "GB_nthreads.h"
#include "GB_log2.h"
#include "GB_task_struct.h"
#include "GB_hash.h"
#include "GB_wait_macros.h"
#include "GB_AxB_macros.h"
#include "GB_ek_slice_kernels.h"
#include "GB_bitmap_scatter.h"
#include "GB_int64_mult.h"
#include "GB_hyper_hash_lookup.h"
#include "GB_omp_kernels.h"
#include "GB_callback.h"

#endif

