40 Internal::PhysicalRegionImpl* impl;
42 FRIEND_ALL_RUNTIME_CLASSES
47 inline bool exists(
void)
const {
return (impl !=
nullptr); }
50 return (impl == reg.impl);
54 return (impl != reg.impl);
58 return (impl < reg.impl);
60 std::size_t hash(
void)
const;
74 bool silence_warnings =
false,
const char* warning_string =
nullptr);
94 std::set<Memory>& memories,
bool silence_warnings =
false,
95 const char* warning_string =
nullptr)
const;
101 template<
int DIM,
typename COORD_T>
102 DomainT<DIM, COORD_T> get_bounds(
void)
const;
105 template<
int DIM,
typename COORD_T>
106 operator DomainT<DIM, COORD_T>(
void)
const;
109 template<
int DIM,
typename COORD_T>
110 operator Rect<DIM, COORD_T>(
void)
const;
113 template<PrivilegeMode,
typename,
int,
typename,
typename,
bool>
115 template<
typename,
bool,
int,
typename,
typename,
bool>
117 template<
typename,
int,
typename,
typename,
bool,
bool,
int>
118 friend class MultiRegionAccessor;
119 template<
typename,
int,
typename,
typename,
bool>
121 template<
typename,
int,
typename,
typename>
123 template<
typename, PrivilegeMode>
128 template<PrivilegeMode,
typename,
int,
typename>
130 template<
typename,
int,
typename>
131 friend class UnsafeSpanIterator;
132 Realm::RegionInstance get_instance_info(
133 PrivilegeMode mode, FieldID fid,
size_t field_size,
void* realm_is,
134 TypeTag type_tag,
const char* warning_string,
bool silence_warnings,
135 bool generic_accessor,
bool check_field_size,
136 ReductionOpID redop = 0)
const;
137 Realm::RegionInstance get_instance_info(
138 PrivilegeMode mode,
const std::vector<PhysicalRegion>& other_regions,
139 FieldID fid,
size_t field_size,
void* realm_is, TypeTag type_tag,
140 const char* warning_string,
bool silence_warnings,
141 bool generic_accessor,
bool check_field_size,
bool need_bounds,
142 ReductionOpID redop = 0)
const;
143 Realm::RegionInstance get_padding_info(
144 FieldID fid,
size_t field_size,
Domain* inner,
Domain& outer,
145 const char* warning_string,
bool silence_warnings,
146 bool generic_accessor,
bool check_field_size)
const;
147 void report_incompatible_accessor(
148 const char* accessor_kind, Realm::RegionInstance instance,
150 void report_incompatible_multi_accessor(
151 unsigned index, FieldID fid, Realm::RegionInstance inst1,
152 Realm::RegionInstance inst2)
const;
153 void report_colocation_violation(
154 const char* accessor_kind, FieldID fid, Realm::RegionInstance inst1,
156 bool reduction =
false)
const;
157 static void empty_colocation_regions(
158 const char* accessor_kind, FieldID fid,
bool reduction =
false);
159 static void fail_bounds_check(
160 DomainPoint p, FieldID fid, PrivilegeMode mode,
bool multi =
false);
161 static void fail_bounds_check(
162 Domain d, FieldID fid, PrivilegeMode mode,
bool multi =
false);
163 static void fail_privilege_check(
165 static void fail_privilege_check(
Domain d, FieldID fid, PrivilegeMode mode);
166 static void fail_padding_check(
DomainPoint p, FieldID fid);
167 static void fail_nondense_rect(
void);
168 static void fail_rect_piece(
void);
170 void get_bounds(
void* realm_is, TypeTag type_tag)
const;
272 static_assert(DIM > 0,
"DIM must be positive");
273 static_assert(DIM <= LEGION_MAX_DIM,
"DIM must be <= LEGION_MAX_DIM");
274 static_assert(std::is_integral<COORD_T>::value,
"must be integral type");
281 bool silence_warnings =
false,
const char* warning_string =
nullptr);
283 PieceIteratorT<DIM, COORD_T>& operator=(
const PieceIteratorT& rhs);
284 PieceIteratorT<DIM, COORD_T>& operator=(
PieceIteratorT&& rhs)
noexcept;
286 inline bool step(
void);
287 inline const Rect<DIM, COORD_T>& operator*(
void)
const;
288 inline const Rect<DIM, COORD_T>* operator->(
void)
const;
289 inline PieceIteratorT<DIM, COORD_T>& operator++(
void);
290 inline PieceIteratorT<DIM, COORD_T> operator++(
int );
292 Rect<DIM, COORD_T> current_rect;
309 typedef std::random_access_iterator_tag iterator_category;
310 typedef FT value_type;
311 typedef std::ptrdiff_t difference_type;
313 typedef FT& reference;
315 iterator(
void) : ptr(
nullptr), stride(0) { }
317 iterator(uint8_t* p,
size_t s) : ptr(p), stride(s) { }
325 inline iterator& operator+=(
int rhs)
330 inline iterator& operator-=(
int rhs)
335 inline FT& operator*(
void)
const
337 FT* result =
nullptr;
338 static_assert(
sizeof(result) ==
sizeof(ptr));
339 memcpy(&result, &ptr,
sizeof(result));
342 inline FT* operator->(
void)
const
344 FT* result =
nullptr;
345 static_assert(
sizeof(result) ==
sizeof(ptr));
346 memcpy(&result, &ptr,
sizeof(result));
349 inline FT& operator[](
int rhs)
const
351 FT* result =
nullptr;
352 uint8_t* ptr2 = ptr + rhs * stride;
353 static_assert(
sizeof(result) ==
sizeof(ptr2));
354 memcpy(&result, &ptr2,
sizeof(result));
380 inline iterator operator+(
int rhs)
const
382 return iterator(ptr + stride * rhs, stride);
384 inline iterator operator-(
int rhs)
const
386 return iterator(ptr - stride * rhs, stride);
389 inline bool operator==(
const iterator& rhs)
const
391 return (ptr == rhs.ptr);
393 inline bool operator!=(
const iterator& rhs)
const
395 return (ptr != rhs.ptr);
397 inline bool operator<(
const iterator& rhs)
const
399 return (ptr < rhs.ptr);
401 inline bool operator>(
const iterator& rhs)
const
403 return (ptr > rhs.ptr);
405 inline bool operator<=(
const iterator& rhs)
const
407 return (ptr <= rhs.ptr);
409 inline bool operator>=(
const iterator& rhs)
const
411 return (ptr >= rhs.ptr);
420 typedef std::random_access_iterator_tag iterator_category;
421 typedef FT value_type;
422 typedef std::ptrdiff_t difference_type;
424 typedef FT& reference;
446 inline FT& operator*(
void)
const
448 FT* result =
nullptr;
449 static_assert(
sizeof(result) ==
sizeof(ptr));
450 memcpy(&result, &ptr,
sizeof(result));
453 inline FT* operator->(
void)
const
455 FT* result =
nullptr;
456 static_assert(
sizeof(result) ==
sizeof(ptr));
457 memcpy(&result, &ptr,
sizeof(result));
460 inline FT& operator[](
int rhs)
const
462 FT* result =
nullptr;
463 uint8_t* ptr2 = ptr - rhs * stride;
464 static_assert(
sizeof(result) ==
sizeof(ptr2));
465 memcpy(&result, &ptr2,
sizeof(result));
502 return (ptr == rhs.ptr);
506 return (ptr != rhs.ptr);
510 return (ptr > rhs.ptr);
514 return (ptr < rhs.ptr);
518 return (ptr >= rhs.ptr);
522 return (ptr <= rhs.ptr);
529 Span(
void) : base(nullptr), extent(0), stride(0) { }
530 Span(FT* b,
size_t e,
size_t s =
sizeof(FT))
531 : base(nullptr), extent(e), stride(s)
533 static_assert(
sizeof(base) ==
sizeof(b));
534 memcpy(&base, &b,
sizeof(base));
537 inline iterator begin(
void)
const {
return iterator(base, stride); }
538 inline iterator end(
void)
const
540 return iterator(base + extent * stride, stride);
542 inline reverse_iterator rbegin(
void)
const
544 return reverse_iterator(base + (extent - 1) * stride, stride);
546 inline reverse_iterator rend(
void)
const
548 return reverse_iterator(base - stride, stride);
551 inline FT& front(
void)
const
553 FT* result =
nullptr;
554 static_assert(
sizeof(result) ==
sizeof(base));
555 memcpy(&result, &base,
sizeof(result));
558 inline FT& back(
void)
const
560 FT* result =
nullptr;
561 uint8_t* ptr = base + (extent - 1) * stride;
562 static_assert(
sizeof(result) ==
sizeof(ptr));
563 memcpy(&result, &ptr,
sizeof(result));
566 inline FT& operator[](
int index)
const
568 FT* result =
nullptr;
569 uint8_t* ptr = base + index * stride;
570 static_assert(
sizeof(result) ==
sizeof(ptr));
571 memcpy(&result, &ptr,
sizeof(result));
574 inline FT* data(
void)
const
576 FT* result =
nullptr;
577 static_assert(
sizeof(result) ==
sizeof(base));
578 memcpy(&result, &base,
sizeof(result));
581 inline uintptr_t get_base(
void)
const {
return uintptr_t(base); }
583 inline size_t size(
void)
const {
return extent; }
584 inline size_t step(
void)
const {
return stride; }
585 inline bool empty(
void)
const {
return (extent == 0); }
604 static_assert(DIM > 0,
"DIM must be positive");
605 static_assert(DIM <= LEGION_MAX_DIM,
"DIM must be <= LEGION_MAX_DIM");
606 static_assert(std::is_integral<COORD_T>::value,
"must be integral type");
613 size_t actual_field_size =
sizeof(FT),
615 bool check_field_size =
true,
617 bool check_field_size =
false,
620 bool privileges_only =
true,
bool silence_warnings =
false,
621 const char* warning_string =
nullptr);
623 inline bool valid(
void)
const;
624 inline bool step(
void);
626 inline operator bool(
void)
const;
627 inline bool operator()(
void)
const;
628 inline const Span<FT, PM>& operator*(
void)
const;
629 inline const Span<FT, PM>* operator->(
void)
const;
630 inline SpanIterator<PM, FT, DIM, COORD_T>& operator++(
void);
631 inline SpanIterator<PM, FT, DIM, COORD_T> operator++(
int);
633 PieceIteratorT<DIM, COORD_T> piece_iterator;
634 Realm::MultiAffineAccessor<FT, DIM, COORD_T> accessor;
635 Span<FT, PM> current;
636 Point<DIM, COORD_T> partial_step_point;
638 int partial_step_dim;
Definition geometry.h:154