45 Internal::PhysicalRegionImpl* impl;
47 FRIEND_ALL_RUNTIME_CLASSES
52 inline bool exists(
void)
const {
return (impl !=
nullptr); }
55 return (impl == reg.impl);
59 return (impl != reg.impl);
63 return (impl < reg.impl);
65 std::size_t hash(
void)
const;
79 bool silence_warnings =
false,
const char* warning_string =
nullptr);
99 std::set<Memory>& memories,
bool silence_warnings =
false,
100 const char* warning_string =
nullptr)
const;
106 template<
int DIM,
typename COORD_T>
107 DomainT<DIM, COORD_T> get_bounds(
void)
const;
110 template<
int DIM,
typename COORD_T>
111 operator DomainT<DIM, COORD_T>(
void)
const;
114 template<
int DIM,
typename COORD_T>
115 operator Rect<DIM, COORD_T>(
void)
const;
118 template<PrivilegeMode,
typename,
int,
typename,
typename,
bool>
120 template<
typename,
bool,
int,
typename,
typename,
bool>
122 template<
typename,
int,
typename,
typename,
bool,
bool,
int>
123 friend class MultiRegionAccessor;
124 template<
typename,
int,
typename,
typename,
bool>
126 template<
typename,
int,
typename,
typename>
128 template<
typename, PrivilegeMode>
133 template<PrivilegeMode,
typename,
int,
typename>
135 template<
typename,
int,
typename>
136 friend class UnsafeSpanIterator;
137 Realm::RegionInstance get_instance_info(
138 PrivilegeMode mode, FieldID fid,
size_t field_size,
void* realm_is,
139 TypeTag type_tag,
const char* warning_string,
bool silence_warnings,
140 bool generic_accessor,
bool check_field_size,
141 ReductionOpID redop = 0)
const;
142 Realm::RegionInstance get_instance_info(
143 PrivilegeMode mode,
const std::vector<PhysicalRegion>& other_regions,
144 FieldID fid,
size_t field_size,
void* realm_is, TypeTag type_tag,
145 const char* warning_string,
bool silence_warnings,
146 bool generic_accessor,
bool check_field_size,
bool need_bounds,
147 ReductionOpID redop = 0)
const;
148 Realm::RegionInstance get_padding_info(
149 FieldID fid,
size_t field_size,
Domain* inner,
Domain& outer,
150 const char* warning_string,
bool silence_warnings,
151 bool generic_accessor,
bool check_field_size)
const;
152 void report_incompatible_accessor(
153 const char* accessor_kind, Realm::RegionInstance instance,
155 void report_incompatible_multi_accessor(
156 unsigned index, FieldID fid, Realm::RegionInstance inst1,
157 Realm::RegionInstance inst2)
const;
158 void report_colocation_violation(
159 const char* accessor_kind, FieldID fid, Realm::RegionInstance inst1,
161 bool reduction =
false)
const;
162 static void empty_colocation_regions(
163 const char* accessor_kind, FieldID fid,
bool reduction =
false);
164 static void fail_bounds_check(
165 DomainPoint p, FieldID fid, PrivilegeMode mode,
bool multi =
false);
166 static void fail_bounds_check(
167 Domain d, FieldID fid, PrivilegeMode mode,
bool multi =
false);
168 static void fail_privilege_check(
170 static void fail_privilege_check(
Domain d, FieldID fid, PrivilegeMode mode);
171 static void fail_padding_check(
DomainPoint p, FieldID fid);
172 static void fail_nondense_rect(
void);
173 static void fail_rect_piece(
void);
175 void get_bounds(
void* realm_is, TypeTag type_tag)
const;
277 static_assert(DIM > 0,
"DIM must be positive");
278 static_assert(DIM <= LEGION_MAX_DIM,
"DIM must be <= LEGION_MAX_DIM");
279 static_assert(std::is_integral<COORD_T>::value,
"must be integral type");
286 bool silence_warnings =
false,
const char* warning_string =
nullptr);
288 PieceIteratorT<DIM, COORD_T>& operator=(
const PieceIteratorT& rhs);
289 PieceIteratorT<DIM, COORD_T>& operator=(
PieceIteratorT&& rhs)
noexcept;
291 inline bool step(
void);
292 inline const Rect<DIM, COORD_T>& operator*(
void)
const;
293 inline const Rect<DIM, COORD_T>* operator->(
void)
const;
294 inline PieceIteratorT<DIM, COORD_T>& operator++(
void);
295 inline PieceIteratorT<DIM, COORD_T> operator++(
int );
297 Rect<DIM, COORD_T> current_rect;
314 typedef std::random_access_iterator_tag iterator_category;
315 typedef FT value_type;
316 typedef std::ptrdiff_t difference_type;
318 typedef FT& reference;
320 iterator(
void) : ptr(
nullptr), stride(0) { }
322 iterator(uint8_t* p,
size_t s) : ptr(p), stride(s) { }
330 inline iterator& operator+=(
int rhs)
335 inline iterator& operator-=(
int rhs)
340 inline FT& operator*(
void)
const
342 FT* result =
nullptr;
343 static_assert(
sizeof(result) ==
sizeof(ptr));
344 memcpy(&result, &ptr,
sizeof(result));
347 inline FT* operator->(
void)
const
349 FT* result =
nullptr;
350 static_assert(
sizeof(result) ==
sizeof(ptr));
351 memcpy(&result, &ptr,
sizeof(result));
354 inline FT& operator[](
int rhs)
const
356 FT* result =
nullptr;
357 uint8_t* ptr2 = ptr + rhs * stride;
358 static_assert(
sizeof(result) ==
sizeof(ptr2));
359 memcpy(&result, &ptr2,
sizeof(result));
385 inline iterator operator+(
int rhs)
const
387 return iterator(ptr + stride * rhs, stride);
389 inline iterator operator-(
int rhs)
const
391 return iterator(ptr - stride * rhs, stride);
394 inline bool operator==(
const iterator& rhs)
const
396 return (ptr == rhs.ptr);
398 inline bool operator!=(
const iterator& rhs)
const
400 return (ptr != rhs.ptr);
402 inline bool operator<(
const iterator& rhs)
const
404 return (ptr < rhs.ptr);
406 inline bool operator>(
const iterator& rhs)
const
408 return (ptr > rhs.ptr);
410 inline bool operator<=(
const iterator& rhs)
const
412 return (ptr <= rhs.ptr);
414 inline bool operator>=(
const iterator& rhs)
const
416 return (ptr >= rhs.ptr);
425 typedef std::random_access_iterator_tag iterator_category;
426 typedef FT value_type;
427 typedef std::ptrdiff_t difference_type;
429 typedef FT& reference;
451 inline FT& operator*(
void)
const
453 FT* result =
nullptr;
454 static_assert(
sizeof(result) ==
sizeof(ptr));
455 memcpy(&result, &ptr,
sizeof(result));
458 inline FT* operator->(
void)
const
460 FT* result =
nullptr;
461 static_assert(
sizeof(result) ==
sizeof(ptr));
462 memcpy(&result, &ptr,
sizeof(result));
465 inline FT& operator[](
int rhs)
const
467 FT* result =
nullptr;
468 uint8_t* ptr2 = ptr - rhs * stride;
469 static_assert(
sizeof(result) ==
sizeof(ptr2));
470 memcpy(&result, &ptr2,
sizeof(result));
507 return (ptr == rhs.ptr);
511 return (ptr != rhs.ptr);
515 return (ptr > rhs.ptr);
519 return (ptr < rhs.ptr);
523 return (ptr >= rhs.ptr);
527 return (ptr <= rhs.ptr);
534 Span(
void) : base(nullptr), extent(0), stride(0) { }
535 Span(FT* b,
size_t e,
size_t s =
sizeof(FT))
536 : base(nullptr), extent(e), stride(s)
538 static_assert(
sizeof(base) ==
sizeof(b));
539 memcpy(&base, &b,
sizeof(base));
542 inline iterator begin(
void)
const {
return iterator(base, stride); }
543 inline iterator end(
void)
const
545 return iterator(base + extent * stride, stride);
547 inline reverse_iterator rbegin(
void)
const
549 return reverse_iterator(base + (extent - 1) * stride, stride);
551 inline reverse_iterator rend(
void)
const
553 return reverse_iterator(base - stride, stride);
556 inline FT& front(
void)
const
558 FT* result =
nullptr;
559 static_assert(
sizeof(result) ==
sizeof(base));
560 memcpy(&result, &base,
sizeof(result));
563 inline FT& back(
void)
const
565 FT* result =
nullptr;
566 uint8_t* ptr = base + (extent - 1) * stride;
567 static_assert(
sizeof(result) ==
sizeof(ptr));
568 memcpy(&result, &ptr,
sizeof(result));
571 inline FT& operator[](
int index)
const
573 FT* result =
nullptr;
574 uint8_t* ptr = base + index * stride;
575 static_assert(
sizeof(result) ==
sizeof(ptr));
576 memcpy(&result, &ptr,
sizeof(result));
579 inline FT* data(
void)
const
581 FT* result =
nullptr;
582 static_assert(
sizeof(result) ==
sizeof(base));
583 memcpy(&result, &base,
sizeof(result));
586 inline uintptr_t get_base(
void)
const {
return uintptr_t(base); }
588 inline size_t size(
void)
const {
return extent; }
589 inline size_t step(
void)
const {
return stride; }
590 inline bool empty(
void)
const {
return (extent == 0); }
609 static_assert(DIM > 0,
"DIM must be positive");
610 static_assert(DIM <= LEGION_MAX_DIM,
"DIM must be <= LEGION_MAX_DIM");
611 static_assert(std::is_integral<COORD_T>::value,
"must be integral type");
618 size_t actual_field_size =
sizeof(FT),
620 bool check_field_size =
true,
622 bool check_field_size =
false,
625 bool privileges_only =
true,
bool silence_warnings =
false,
626 const char* warning_string =
nullptr);
628 inline bool valid(
void)
const;
629 inline bool step(
void);
631 inline operator bool(
void)
const;
632 inline bool operator()(
void)
const;
633 inline const Span<FT, PM>& operator*(
void)
const;
634 inline const Span<FT, PM>* operator->(
void)
const;
635 inline SpanIterator<PM, FT, DIM, COORD_T>& operator++(
void);
636 inline SpanIterator<PM, FT, DIM, COORD_T> operator++(
int);
638 PieceIteratorT<DIM, COORD_T> piece_iterator;
639 Realm::MultiAffineAccessor<FT, DIM, COORD_T> accessor;
640 Span<FT, PM> current;
641 Point<DIM, COORD_T> partial_step_point;
643 int partial_step_dim;
Definition geometry.h:159