62 typedef typename DeviceType::execution_space execution_space;
63 typedef typename DeviceType::memory_space memory_space;
64 typedef Kokkos::Device<execution_space, memory_space> device_type;
67 typedef typename hash_type::offset_type offset_type;
76 typedef typename Kokkos::View<
const offset_type*, Kokkos::LayoutLeft,
85 typedef typename Kokkos::View<const Kokkos::pair<KeyType, ValueType>*,
86 Kokkos::LayoutLeft, device_type>
96 return contiguousValues_;
103 typedef Kokkos::View<const KeyType*, Kokkos::LayoutLeft, device_type>
keys_type;
210 const Teuchos::ArrayView<const ValueType>&
vals);
212 template <
class K,
class V,
class D>
220 template <
class InDeviceType>
222 typename std::enable_if<!std::is_same<DeviceType, InDeviceType>::value,
int>::type* =
NULL) {
223 using Kokkos::ViewAllocateWithoutInitializing;
245 Kokkos::deep_copy(execution_space(),
val, src.val_);
249 this->minKey_ = src.minKey_;
250 this->maxKey_ = src.maxKey_;
251 this->minVal_ = src.minVal_;
252 this->maxVal_ = src.maxVal_;
253 this->firstContigKey_ = src.firstContigKey_;
254 this->lastContigKey_ = src.lastContigKey_;
255 this->contiguousValues_ = src.contiguousValues_;
256 this->checkedForDuplicateKeys_ = src.checkedForDuplicateKeys_;
257 this->hasDuplicateKeys_ = src.hasDuplicateKeys_;
262 const offset_type
size = this->getSize();
266 return Tpetra::Details::OrdinalTraits<ValueType>::invalid();
271 if (this->hasContiguousValues() &&
272 key >= firstContigKey_ &&
key <= lastContigKey_) {
276 const typename hash_type::result_type
hashVal =
277 hash_type::hashFunc(
key,
size);
279 const offset_type start = ptr_[
hashVal];
281 for (offset_type
k = start;
k <
end; ++
k) {
283 return val_[
k].second;
289 return Tpetra::Details::OrdinalTraits<ValueType>::invalid();
301 if (this->hasContiguousValues()) {
302 return val_.extent(0) +
static_cast<offset_type
>(lastContigKey_ - firstContigKey_);
304 return val_.extent(0);
380 const Teuchos::EVerbosityLevel
verbLevel =
381 Teuchos::Describable::verbLevel_default)
const;
395#if KOKKOS_VERSION >= 40799
396 KeyType minKey_ = ::KokkosKernels::ArithTraits<KeyType>::max();
398 KeyType minKey_ = ::Kokkos::ArithTraits<KeyType>::max();
406#if KOKKOS_VERSION >= 40799
407 KeyType maxKey_ = ::KokkosKernels::ArithTraits<KeyType>::max();
409 KeyType maxKey_ = ::Kokkos::ArithTraits<KeyType>::max();
416#if KOKKOS_VERSION >= 40799
417 ValueType minVal_ = ::KokkosKernels::ArithTraits<ValueType>::max();
419 ValueType minVal_ = ::Kokkos::ArithTraits<ValueType>::max();
426#if KOKKOS_VERSION >= 40799
438#if KOKKOS_VERSION >= 40799
439 KeyType firstContigKey_ = ::KokkosKernels::ArithTraits<KeyType>::max();
441 KeyType firstContigKey_ = ::Kokkos::ArithTraits<KeyType>::max();
450#if KOKKOS_VERSION >= 40799
451 KeyType lastContigKey_ = ::KokkosKernels::ArithTraits<KeyType>::max();
453 KeyType lastContigKey_ = ::Kokkos::ArithTraits<KeyType>::max();
462 bool contiguousValues_ =
true;
470 bool checkedForDuplicateKeys_ =
true;
475 bool hasDuplicateKeys_ =
false;
481 bool checkForDuplicateKeys()
const;
485 return ptr_.extent(0) == 0 ?
static_cast<offset_type
>(0) :
static_cast<offset_type>(ptr_.extent(0) - 1);
488 typedef Kokkos::View<
const KeyType*,
489 typename ptr_type::host_mirror_type::array_layout,
490 typename ptr_type::host_mirror_type::execution_space,
491 Kokkos::MemoryUnmanaged>
492 host_input_keys_type;
495 typename ptr_type::host_mirror_type::array_layout,
496 typename ptr_type::host_mirror_type::execution_space,
497 Kokkos::MemoryUnmanaged>
498 host_input_vals_type;
522 init(
const host_input_keys_type&
keys,
523 const host_input_vals_type&
vals,
FixedHashTable(const FixedHashTable< KeyType, ValueType, InDeviceType > &src, typename std::enable_if<!std::is_same< DeviceType, InDeviceType >::value, int >::type *=NULL)
"Copy" constructor that takes a FixedHashTable with the same KeyType and ValueType,...