Blender  V2.93
FN_cpp_type.hh
Go to the documentation of this file.
1 /*
2  * This program is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU General Public License
4  * as published by the Free Software Foundation; either version 2
5  * of the License, or (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software Foundation,
14  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15  */
16 
17 #pragma once
18 
68 #include "BLI_hash.hh"
69 #include "BLI_index_mask.hh"
70 #include "BLI_math_base.h"
71 #include "BLI_string_ref.hh"
72 #include "BLI_utility_mixins.hh"
73 
74 namespace blender::fn {
75 
77  public:
78  using ConstructDefaultF = void (*)(void *ptr);
79  using ConstructDefaultNF = void (*)(void *ptr, int64_t n);
80  using ConstructDefaultIndicesF = void (*)(void *ptr, IndexMask mask);
81 
82  using DestructF = void (*)(void *ptr);
83  using DestructNF = void (*)(void *ptr, int64_t n);
84  using DestructIndicesF = void (*)(void *ptr, IndexMask mask);
85 
86  using CopyToInitializedF = void (*)(const void *src, void *dst);
87  using CopyToInitializedNF = void (*)(const void *src, void *dst, int64_t n);
88  using CopyToInitializedIndicesF = void (*)(const void *src, void *dst, IndexMask mask);
89 
90  using CopyToUninitializedF = void (*)(const void *src, void *dst);
91  using CopyToUninitializedNF = void (*)(const void *src, void *dst, int64_t n);
92  using CopyToUninitializedIndicesF = void (*)(const void *src, void *dst, IndexMask mask);
93 
94  using MoveToInitializedF = void (*)(void *src, void *dst);
95  using MoveToInitializedNF = void (*)(void *src, void *dst, int64_t n);
96  using MoveToInitializedIndicesF = void (*)(void *src, void *dst, IndexMask mask);
97 
98  using MoveToUninitializedF = void (*)(void *src, void *dst);
99  using MoveToUninitializedNF = void (*)(void *src, void *dst, int64_t n);
100  using MoveToUninitializedIndicesF = void (*)(void *src, void *dst, IndexMask mask);
101 
102  using RelocateToInitializedF = void (*)(void *src, void *dst);
103  using RelocateToInitializedNF = void (*)(void *src, void *dst, int64_t n);
104  using RelocateToInitializedIndicesF = void (*)(void *src, void *dst, IndexMask mask);
105 
106  using RelocateToUninitializedF = void (*)(void *src, void *dst);
107  using RelocateToUninitializedNF = void (*)(void *src, void *dst, int64_t n);
108  using RelocateToUninitializedIndicesF = void (*)(void *src, void *dst, IndexMask mask);
109 
110  using FillInitializedF = void (*)(const void *value, void *dst, int64_t n);
111  using FillInitializedIndicesF = void (*)(const void *value, void *dst, IndexMask mask);
112 
113  using FillUninitializedF = void (*)(const void *value, void *dst, int64_t n);
114  using FillUninitializedIndicesF = void (*)(const void *value, void *dst, IndexMask mask);
115 
116  using DebugPrintF = void (*)(const void *value, std::stringstream &ss);
117  using IsEqualF = bool (*)(const void *a, const void *b);
118  using HashF = uint64_t (*)(const void *value);
119 
120  private:
121  int64_t size_;
122  int64_t alignment_;
123  uintptr_t alignment_mask_;
124  bool is_trivially_destructible_;
125 
126  ConstructDefaultF construct_default_;
127  ConstructDefaultNF construct_default_n_;
128  ConstructDefaultIndicesF construct_default_indices_;
129 
130  DestructF destruct_;
131  DestructNF destruct_n_;
132  DestructIndicesF destruct_indices_;
133 
134  CopyToInitializedF copy_to_initialized_;
135  CopyToInitializedNF copy_to_initialized_n_;
136  CopyToInitializedIndicesF copy_to_initialized_indices_;
137 
138  CopyToUninitializedF copy_to_uninitialized_;
139  CopyToUninitializedNF copy_to_uninitialized_n_;
140  CopyToUninitializedIndicesF copy_to_uninitialized_indices_;
141 
142  MoveToInitializedF move_to_initialized_;
143  MoveToInitializedNF move_to_initialized_n_;
144  MoveToInitializedIndicesF move_to_initialized_indices_;
145 
146  MoveToUninitializedF move_to_uninitialized_;
147  MoveToUninitializedNF move_to_uninitialized_n_;
148  MoveToUninitializedIndicesF move_to_uninitialized_indices_;
149 
150  RelocateToInitializedF relocate_to_initialized_;
151  RelocateToInitializedNF relocate_to_initialized_n_;
152  RelocateToInitializedIndicesF relocate_to_initialized_indices_;
153 
154  RelocateToUninitializedF relocate_to_uninitialized_;
155  RelocateToUninitializedNF relocate_to_uninitialized_n_;
156  RelocateToUninitializedIndicesF relocate_to_uninitialized_indices_;
157 
158  FillInitializedF fill_initialized_;
159  FillInitializedIndicesF fill_initialized_indices_;
160 
161  FillUninitializedF fill_uninitialized_;
162  FillUninitializedIndicesF fill_uninitialized_indices_;
163 
164  DebugPrintF debug_print_;
165  IsEqualF is_equal_;
166  HashF hash_;
167 
168  const void *default_value_;
169  std::string name_;
170 
171  public:
172  CPPType(std::string name,
173  int64_t size,
206  HashF hash,
207  const void *default_value)
208  : size_(size),
209  alignment_(alignment),
210  is_trivially_destructible_(is_trivially_destructible),
211  construct_default_(construct_default),
212  construct_default_n_(construct_default_n),
213  construct_default_indices_(construct_default_indices),
214  destruct_(destruct),
215  destruct_n_(destruct_n),
216  destruct_indices_(destruct_indices),
217  copy_to_initialized_(copy_to_initialized),
218  copy_to_initialized_n_(copy_to_initialized_n),
219  copy_to_initialized_indices_(copy_to_initialized_indices),
220  copy_to_uninitialized_(copy_to_uninitialized),
221  copy_to_uninitialized_n_(copy_to_uninitialized_n),
222  copy_to_uninitialized_indices_(copy_to_uninitialized_indices),
223  move_to_initialized_(move_to_initialized),
224  move_to_initialized_n_(move_to_initialized_n),
225  move_to_initialized_indices_(move_to_initialized_indices),
226  move_to_uninitialized_(move_to_uninitialized),
227  move_to_uninitialized_n_(move_to_uninitialized_n),
228  move_to_uninitialized_indices_(move_to_uninitialized_indices),
229  relocate_to_initialized_(relocate_to_initialized),
230  relocate_to_initialized_n_(relocate_to_initialized_n),
231  relocate_to_initialized_indices_(relocate_to_initialized_indices),
232  relocate_to_uninitialized_(relocate_to_uninitialized),
233  relocate_to_uninitialized_n_(relocate_to_uninitialized_n),
234  relocate_to_uninitialized_indices_(relocate_to_uninitialized_indices),
235  fill_initialized_(fill_initialized),
236  fill_initialized_indices_(fill_initialized_indices),
237  fill_uninitialized_(fill_uninitialized),
238  fill_uninitialized_indices_(fill_uninitialized_indices),
239  debug_print_(debug_print),
240  is_equal_(is_equal),
241  hash_(hash),
242  default_value_(default_value),
243  name_(name)
244  {
245  BLI_assert(is_power_of_2_i(alignment_));
246  alignment_mask_ = (uintptr_t)alignment_ - (uintptr_t)1;
247  }
248 
253  friend bool operator==(const CPPType &a, const CPPType &b)
254  {
255  return &a == &b;
256  }
257 
258  friend bool operator!=(const CPPType &a, const CPPType &b)
259  {
260  return !(&a == &b);
261  }
262 
263  template<typename T> static const CPPType &get();
264 
270  {
271  return name_;
272  }
273 
280  int64_t size() const
281  {
282  return size_;
283  }
284 
292  {
293  return alignment_;
294  }
295 
304  {
305  return is_trivially_destructible_;
306  }
307 
311  bool pointer_has_valid_alignment(const void *ptr) const
312  {
313  return ((uintptr_t)ptr & alignment_mask_) == 0;
314  }
315 
316  bool pointer_can_point_to_instance(const void *ptr) const
317  {
318  return ptr != nullptr && pointer_has_valid_alignment(ptr);
319  }
320 
329  void construct_default(void *ptr) const
330  {
332 
333  construct_default_(ptr);
334  }
335 
336  void construct_default_n(void *ptr, int64_t n) const
337  {
338  BLI_assert(n == 0 || this->pointer_can_point_to_instance(ptr));
339 
340  construct_default_n_(ptr, n);
341  }
342 
344  {
345  BLI_assert(mask.size() == 0 || this->pointer_can_point_to_instance(ptr));
346 
347  construct_default_indices_(ptr, mask);
348  }
349 
358  void destruct(void *ptr) const
359  {
361 
362  destruct_(ptr);
363  }
364 
365  void destruct_n(void *ptr, int64_t n) const
366  {
367  BLI_assert(n == 0 || this->pointer_can_point_to_instance(ptr));
368 
369  destruct_n_(ptr, n);
370  }
371 
372  void destruct_indices(void *ptr, IndexMask mask) const
373  {
374  BLI_assert(mask.size() == 0 || this->pointer_can_point_to_instance(ptr));
375 
376  destruct_indices_(ptr, mask);
377  }
378 
380  {
381  return destruct_;
382  }
383 
390  void copy_to_initialized(const void *src, void *dst) const
391  {
392  BLI_assert(src != dst);
395 
396  copy_to_initialized_(src, dst);
397  }
398 
399  void copy_to_initialized_n(const void *src, void *dst, int64_t n) const
400  {
401  BLI_assert(n == 0 || src != dst);
402  BLI_assert(n == 0 || this->pointer_can_point_to_instance(src));
403  BLI_assert(n == 0 || this->pointer_can_point_to_instance(dst));
404 
405  copy_to_initialized_n_(src, dst, n);
406  }
407 
408  void copy_to_initialized_indices(const void *src, void *dst, IndexMask mask) const
409  {
410  BLI_assert(mask.size() == 0 || src != dst);
411  BLI_assert(mask.size() == 0 || this->pointer_can_point_to_instance(src));
412  BLI_assert(mask.size() == 0 || this->pointer_can_point_to_instance(dst));
413 
414  copy_to_initialized_indices_(src, dst, mask);
415  }
416 
425  void copy_to_uninitialized(const void *src, void *dst) const
426  {
427  BLI_assert(src != dst);
430 
431  copy_to_uninitialized_(src, dst);
432  }
433 
434  void copy_to_uninitialized_n(const void *src, void *dst, int64_t n) const
435  {
436  BLI_assert(n == 0 || src != dst);
437  BLI_assert(n == 0 || this->pointer_can_point_to_instance(src));
438  BLI_assert(n == 0 || this->pointer_can_point_to_instance(dst));
439 
440  copy_to_uninitialized_n_(src, dst, n);
441  }
442 
443  void copy_to_uninitialized_indices(const void *src, void *dst, IndexMask mask) const
444  {
445  BLI_assert(mask.size() == 0 || src != dst);
446  BLI_assert(mask.size() == 0 || this->pointer_can_point_to_instance(src));
447  BLI_assert(mask.size() == 0 || this->pointer_can_point_to_instance(dst));
448 
449  copy_to_uninitialized_indices_(src, dst, mask);
450  }
451 
460  void move_to_initialized(void *src, void *dst) const
461  {
462  BLI_assert(src != dst);
465 
466  move_to_initialized_(src, dst);
467  }
468 
469  void move_to_initialized_n(void *src, void *dst, int64_t n) const
470  {
471  BLI_assert(n == 0 || src != dst);
472  BLI_assert(n == 0 || this->pointer_can_point_to_instance(src));
473  BLI_assert(n == 0 || this->pointer_can_point_to_instance(dst));
474 
475  move_to_initialized_n_(src, dst, n);
476  }
477 
478  void move_to_initialized_indices(void *src, void *dst, IndexMask mask) const
479  {
480  BLI_assert(mask.size() == 0 || src != dst);
481  BLI_assert(mask.size() == 0 || this->pointer_can_point_to_instance(src));
482  BLI_assert(mask.size() == 0 || this->pointer_can_point_to_instance(dst));
483 
484  move_to_initialized_indices_(src, dst, mask);
485  }
486 
495  void move_to_uninitialized(void *src, void *dst) const
496  {
497  BLI_assert(src != dst);
500 
501  move_to_uninitialized_(src, dst);
502  }
503 
504  void move_to_uninitialized_n(void *src, void *dst, int64_t n) const
505  {
506  BLI_assert(n == 0 || src != dst);
507  BLI_assert(n == 0 || this->pointer_can_point_to_instance(src));
508  BLI_assert(n == 0 || this->pointer_can_point_to_instance(dst));
509 
510  move_to_uninitialized_n_(src, dst, n);
511  }
512 
513  void move_to_uninitialized_indices(void *src, void *dst, IndexMask mask) const
514  {
515  BLI_assert(mask.size() == 0 || src != dst);
516  BLI_assert(mask.size() == 0 || this->pointer_can_point_to_instance(src));
517  BLI_assert(mask.size() == 0 || this->pointer_can_point_to_instance(dst));
518 
519  move_to_uninitialized_indices_(src, dst, mask);
520  }
521 
530  void relocate_to_initialized(void *src, void *dst) const
531  {
532  BLI_assert(src != dst);
535 
536  relocate_to_initialized_(src, dst);
537  }
538 
539  void relocate_to_initialized_n(void *src, void *dst, int64_t n) const
540  {
541  BLI_assert(n == 0 || src != dst);
542  BLI_assert(n == 0 || this->pointer_can_point_to_instance(src));
543  BLI_assert(n == 0 || this->pointer_can_point_to_instance(dst));
544 
545  relocate_to_initialized_n_(src, dst, n);
546  }
547 
548  void relocate_to_initialized_indices(void *src, void *dst, IndexMask mask) const
549  {
550  BLI_assert(mask.size() == 0 || src != dst);
551  BLI_assert(mask.size() == 0 || this->pointer_can_point_to_instance(src));
552  BLI_assert(mask.size() == 0 || this->pointer_can_point_to_instance(dst));
553 
554  relocate_to_initialized_indices_(src, dst, mask);
555  }
556 
565  void relocate_to_uninitialized(void *src, void *dst) const
566  {
567  BLI_assert(src != dst);
570 
571  relocate_to_uninitialized_(src, dst);
572  }
573 
574  void relocate_to_uninitialized_n(void *src, void *dst, int64_t n) const
575  {
576  BLI_assert(n == 0 || src != dst);
577  BLI_assert(n == 0 || this->pointer_can_point_to_instance(src));
578  BLI_assert(n == 0 || this->pointer_can_point_to_instance(dst));
579 
580  relocate_to_uninitialized_n_(src, dst, n);
581  }
582 
583  void relocate_to_uninitialized_indices(void *src, void *dst, IndexMask mask) const
584  {
585  BLI_assert(mask.size() == 0 || src != dst);
586  BLI_assert(mask.size() == 0 || this->pointer_can_point_to_instance(src));
587  BLI_assert(mask.size() == 0 || this->pointer_can_point_to_instance(dst));
588 
589  relocate_to_uninitialized_indices_(src, dst, mask);
590  }
591 
597  void fill_initialized(const void *value, void *dst, int64_t n) const
598  {
599  BLI_assert(n == 0 || this->pointer_can_point_to_instance(value));
600  BLI_assert(n == 0 || this->pointer_can_point_to_instance(dst));
601 
602  fill_initialized_(value, dst, n);
603  }
604 
605  void fill_initialized_indices(const void *value, void *dst, IndexMask mask) const
606  {
607  BLI_assert(mask.size() == 0 || this->pointer_can_point_to_instance(value));
608  BLI_assert(mask.size() == 0 || this->pointer_can_point_to_instance(dst));
609 
610  fill_initialized_indices_(value, dst, mask);
611  }
612 
618  void fill_uninitialized(const void *value, void *dst, int64_t n) const
619  {
620  BLI_assert(n == 0 || this->pointer_can_point_to_instance(value));
621  BLI_assert(n == 0 || this->pointer_can_point_to_instance(dst));
622 
623  fill_uninitialized_(value, dst, n);
624  }
625 
626  void fill_uninitialized_indices(const void *value, void *dst, IndexMask mask) const
627  {
628  BLI_assert(mask.size() == 0 || this->pointer_can_point_to_instance(value));
629  BLI_assert(mask.size() == 0 || this->pointer_can_point_to_instance(dst));
630 
631  fill_uninitialized_indices_(value, dst, mask);
632  }
633 
634  void debug_print(const void *value, std::stringstream &ss) const
635  {
637  debug_print_(value, ss);
638  }
639 
640  bool is_equal(const void *a, const void *b) const
641  {
644  return is_equal_(a, b);
645  }
646 
647  uint64_t hash(const void *value) const
648  {
650  return hash_(value);
651  }
652 
657  const void *default_value() const
658  {
659  return default_value_;
660  }
661 
662  uint64_t hash() const
663  {
664  return get_default_hash(this);
665  }
666 
667  template<typename T> bool is() const
668  {
669  return this == &CPPType::get<T>();
670  }
671 };
672 
673 } // namespace blender::fn
674 
675 /* Utility for allocating an uninitialized buffer for a single value of the given #CPPType. */
676 #define BUFFER_FOR_CPP_TYPE_VALUE(type, variable_name) \
677  blender::DynamicStackBuffer<64, 64> stack_buffer_for_##variable_name((type).size(), \
678  (type).alignment()); \
679  void *variable_name = stack_buffer_for_##variable_name.buffer();
#define BLI_assert(a)
Definition: BLI_assert.h:58
MINLINE int is_power_of_2_i(int n)
void(*)(void *src, void *dst, IndexMask mask) MoveToUninitializedIndicesF
Definition: FN_cpp_type.hh:100
void construct_default(void *ptr) const
Definition: FN_cpp_type.hh:329
void(*)(const void *src, void *dst) CopyToInitializedF
Definition: FN_cpp_type.hh:86
void(*)(void *src, void *dst) RelocateToUninitializedF
Definition: FN_cpp_type.hh:106
bool pointer_has_valid_alignment(const void *ptr) const
Definition: FN_cpp_type.hh:311
void relocate_to_uninitialized_indices(void *src, void *dst, IndexMask mask) const
Definition: FN_cpp_type.hh:583
uint64_t hash(const void *value) const
Definition: FN_cpp_type.hh:647
void(*)(void *src, void *dst, int64_t n) RelocateToInitializedNF
Definition: FN_cpp_type.hh:103
int64_t size() const
Definition: FN_cpp_type.hh:280
void copy_to_initialized_n(const void *src, void *dst, int64_t n) const
Definition: FN_cpp_type.hh:399
void(*)(const void *src, void *dst, IndexMask mask) CopyToUninitializedIndicesF
Definition: FN_cpp_type.hh:92
void(*)(const void *src, void *dst) CopyToUninitializedF
Definition: FN_cpp_type.hh:90
void(*)(void *src, void *dst, int64_t n) RelocateToUninitializedNF
Definition: FN_cpp_type.hh:107
void(*)(void *src, void *dst, int64_t n) MoveToUninitializedNF
Definition: FN_cpp_type.hh:99
void copy_to_initialized_indices(const void *src, void *dst, IndexMask mask) const
Definition: FN_cpp_type.hh:408
StringRefNull name() const
Definition: FN_cpp_type.hh:269
uint64_t(*)(const void *value) HashF
Definition: FN_cpp_type.hh:118
void(*)(const void *value, void *dst, int64_t n) FillInitializedF
Definition: FN_cpp_type.hh:110
void(*)(const void *value, void *dst, IndexMask mask) FillUninitializedIndicesF
Definition: FN_cpp_type.hh:114
void destruct_indices(void *ptr, IndexMask mask) const
Definition: FN_cpp_type.hh:372
int64_t alignment() const
Definition: FN_cpp_type.hh:291
bool is_trivially_destructible() const
Definition: FN_cpp_type.hh:303
void(*)(const void *value, std::stringstream &ss) DebugPrintF
Definition: FN_cpp_type.hh:116
void move_to_uninitialized_n(void *src, void *dst, int64_t n) const
Definition: FN_cpp_type.hh:504
void(*)(void *src, void *dst) MoveToUninitializedF
Definition: FN_cpp_type.hh:98
void construct_default_indices(void *ptr, IndexMask mask) const
Definition: FN_cpp_type.hh:343
void(*)(void *ptr, int64_t n) DestructNF
Definition: FN_cpp_type.hh:83
uint64_t hash() const
Definition: FN_cpp_type.hh:662
void fill_initialized(const void *value, void *dst, int64_t n) const
Definition: FN_cpp_type.hh:597
void(*)(void *src, void *dst, int64_t n) MoveToInitializedNF
Definition: FN_cpp_type.hh:95
friend bool operator!=(const CPPType &a, const CPPType &b)
Definition: FN_cpp_type.hh:258
void(*)(void *src, void *dst, IndexMask mask) RelocateToInitializedIndicesF
Definition: FN_cpp_type.hh:104
void construct_default_n(void *ptr, int64_t n) const
Definition: FN_cpp_type.hh:336
void(*)(void *ptr, IndexMask mask) ConstructDefaultIndicesF
Definition: FN_cpp_type.hh:80
void fill_initialized_indices(const void *value, void *dst, IndexMask mask) const
Definition: FN_cpp_type.hh:605
DestructF destruct_cb() const
Definition: FN_cpp_type.hh:379
void relocate_to_uninitialized_n(void *src, void *dst, int64_t n) const
Definition: FN_cpp_type.hh:574
void debug_print(const void *value, std::stringstream &ss) const
Definition: FN_cpp_type.hh:634
void(*)(void *src, void *dst) RelocateToInitializedF
Definition: FN_cpp_type.hh:102
void copy_to_uninitialized_n(const void *src, void *dst, int64_t n) const
Definition: FN_cpp_type.hh:434
void relocate_to_uninitialized(void *src, void *dst) const
Definition: FN_cpp_type.hh:565
void copy_to_uninitialized_indices(const void *src, void *dst, IndexMask mask) const
Definition: FN_cpp_type.hh:443
void(*)(const void *value, void *dst, int64_t n) FillUninitializedF
Definition: FN_cpp_type.hh:113
void fill_uninitialized_indices(const void *value, void *dst, IndexMask mask) const
Definition: FN_cpp_type.hh:626
void(*)(void *ptr) DestructF
Definition: FN_cpp_type.hh:82
void(*)(void *ptr, int64_t n) ConstructDefaultNF
Definition: FN_cpp_type.hh:79
bool(*)(const void *a, const void *b) IsEqualF
Definition: FN_cpp_type.hh:117
void(*)(void *ptr) ConstructDefaultF
Definition: FN_cpp_type.hh:78
bool is_equal(const void *a, const void *b) const
Definition: FN_cpp_type.hh:640
void(*)(void *src, void *dst, IndexMask mask) RelocateToUninitializedIndicesF
Definition: FN_cpp_type.hh:108
void move_to_initialized_indices(void *src, void *dst, IndexMask mask) const
Definition: FN_cpp_type.hh:478
void relocate_to_initialized_indices(void *src, void *dst, IndexMask mask) const
Definition: FN_cpp_type.hh:548
void move_to_uninitialized_indices(void *src, void *dst, IndexMask mask) const
Definition: FN_cpp_type.hh:513
void move_to_uninitialized(void *src, void *dst) const
Definition: FN_cpp_type.hh:495
void destruct(void *ptr) const
Definition: FN_cpp_type.hh:358
CPPType(std::string name, int64_t size, int64_t alignment, bool is_trivially_destructible, ConstructDefaultF construct_default, ConstructDefaultNF construct_default_n, ConstructDefaultIndicesF construct_default_indices, DestructF destruct, DestructNF destruct_n, DestructIndicesF destruct_indices, CopyToInitializedF copy_to_initialized, CopyToInitializedNF copy_to_initialized_n, CopyToInitializedIndicesF copy_to_initialized_indices, CopyToUninitializedF copy_to_uninitialized, CopyToUninitializedNF copy_to_uninitialized_n, CopyToUninitializedIndicesF copy_to_uninitialized_indices, MoveToInitializedF move_to_initialized, MoveToInitializedNF move_to_initialized_n, MoveToInitializedIndicesF move_to_initialized_indices, MoveToUninitializedF move_to_uninitialized, MoveToUninitializedNF move_to_uninitialized_n, MoveToUninitializedIndicesF move_to_uninitialized_indices, RelocateToInitializedF relocate_to_initialized, RelocateToInitializedNF relocate_to_initialized_n, RelocateToInitializedIndicesF relocate_to_initialized_indices, RelocateToUninitializedF relocate_to_uninitialized, RelocateToUninitializedNF relocate_to_uninitialized_n, RelocateToUninitializedIndicesF relocate_to_uninitialized_indices, FillInitializedF fill_initialized, FillInitializedIndicesF fill_initialized_indices, FillUninitializedF fill_uninitialized, FillUninitializedIndicesF fill_uninitialized_indices, DebugPrintF debug_print, IsEqualF is_equal, HashF hash, const void *default_value)
Definition: FN_cpp_type.hh:172
void copy_to_initialized(const void *src, void *dst) const
Definition: FN_cpp_type.hh:390
static const CPPType & get()
void(*)(const void *value, void *dst, IndexMask mask) FillInitializedIndicesF
Definition: FN_cpp_type.hh:111
void(*)(const void *src, void *dst, int64_t n) CopyToInitializedNF
Definition: FN_cpp_type.hh:87
void relocate_to_initialized(void *src, void *dst) const
Definition: FN_cpp_type.hh:530
void move_to_initialized(void *src, void *dst) const
Definition: FN_cpp_type.hh:460
void(*)(void *src, void *dst, IndexMask mask) MoveToInitializedIndicesF
Definition: FN_cpp_type.hh:96
void destruct_n(void *ptr, int64_t n) const
Definition: FN_cpp_type.hh:365
void fill_uninitialized(const void *value, void *dst, int64_t n) const
Definition: FN_cpp_type.hh:618
void(*)(void *ptr, IndexMask mask) DestructIndicesF
Definition: FN_cpp_type.hh:84
void copy_to_uninitialized(const void *src, void *dst) const
Definition: FN_cpp_type.hh:425
const void * default_value() const
Definition: FN_cpp_type.hh:657
void move_to_initialized_n(void *src, void *dst, int64_t n) const
Definition: FN_cpp_type.hh:469
friend bool operator==(const CPPType &a, const CPPType &b)
Definition: FN_cpp_type.hh:253
void(*)(const void *src, void *dst, int64_t n) CopyToUninitializedNF
Definition: FN_cpp_type.hh:91
void relocate_to_initialized_n(void *src, void *dst, int64_t n) const
Definition: FN_cpp_type.hh:539
void(*)(const void *src, void *dst, IndexMask mask) CopyToInitializedIndicesF
Definition: FN_cpp_type.hh:88
bool pointer_can_point_to_instance(const void *ptr) const
Definition: FN_cpp_type.hh:316
void(*)(void *src, void *dst) MoveToInitializedF
Definition: FN_cpp_type.hh:94
static unsigned a[3]
Definition: RandGen.cpp:92
uint64_t get_default_hash(const T &v)
Definition: BLI_hash.hh:209
_W64 unsigned int uintptr_t
Definition: stdint.h:122
__int64 int64_t
Definition: stdint.h:92
unsigned __int64 uint64_t
Definition: stdint.h:93
ccl_device_inline float4 mask(const int4 &mask, const float4 &a)
PointerRNA * ptr
Definition: wm_files.c:3157