7 #ifndef MI_NEURAYLIB_TYPE_TRAITS_H
8 #define MI_NEURAYLIB_TYPE_TRAITS_H
164 static const char* get_type_name() {
return "Boolean"; }
165 typedef bool Primitive_type;
168 template<>
struct Type_traits<mi::ISint8>
170 static const char* get_type_name() {
return "Sint8"; }
174 template<>
struct Type_traits<mi::ISint16>
176 static const char* get_type_name() {
return "Sint16"; }
180 template<>
struct Type_traits<mi::ISint32>
182 static const char* get_type_name() {
return "Sint32"; }
186 template<>
struct Type_traits<mi::ISint64>
188 static const char* get_type_name() {
return "Sint64"; }
192 template<>
struct Type_traits<mi::IUint8>
194 static const char* get_type_name() {
return "Uint8"; }
198 template<>
struct Type_traits<mi::IUint16>
200 static const char* get_type_name() {
return "Uint16"; }
204 template<>
struct Type_traits<mi::IUint32>
206 static const char* get_type_name() {
return "Uint32"; }
210 template<>
struct Type_traits<mi::IUint64>
212 static const char* get_type_name() {
return "Uint64"; }
216 template<>
struct Type_traits<mi::IFloat32>
218 static const char* get_type_name() {
return "Float32"; }
222 template<>
struct Type_traits<mi::IFloat64>
224 static const char* get_type_name() {
return "Float64"; }
228 template<>
struct Type_traits<mi::ISize>
230 static const char* get_type_name() {
return "Size"; }
234 template<>
struct Type_traits<mi::IDifference>
236 static const char* get_type_name() {
return "Difference"; }
240 template<>
struct Type_traits<mi::IString>
242 static const char* get_type_name() {
return "String"; }
243 typedef const char* Primitive_type;
246 template<>
struct Type_traits<mi::IUuid>
248 static const char* get_type_name() {
return "Uuid"; }
252 template<>
struct Type_traits<mi::IVoid>
254 static const char* get_type_name() {
return "Void"; }
255 typedef void Primitive_type;
258 template<>
struct Type_traits<mi::IRef>
260 static const char* get_type_name() {
return "Ref"; }
261 typedef const char* Primitive_type;
264 template<>
struct Type_traits<mi::IBoolean_2>
266 static const char* get_type_name() {
return "Boolean<2>"; }
270 template<>
struct Type_traits<mi::IBoolean_3>
272 static const char* get_type_name() {
return "Boolean<3>"; }
276 template<>
struct Type_traits<mi::IBoolean_4>
278 static const char* get_type_name() {
return "Boolean<4>"; }
282 template<>
struct Type_traits<mi::ISint32_2>
284 static const char* get_type_name() {
return "Sint32<2>"; }
288 template<>
struct Type_traits<mi::ISint32_3>
290 static const char* get_type_name() {
return "Sint32<3>"; }
294 template<>
struct Type_traits<mi::ISint32_4>
296 static const char* get_type_name() {
return "Sint32<4>"; }
300 template<>
struct Type_traits<mi::IUint32_2>
302 static const char* get_type_name() {
return "Uint32<2>"; }
306 template<>
struct Type_traits<mi::IUint32_3>
308 static const char* get_type_name() {
return "Uint32<3>"; }
312 template<>
struct Type_traits<mi::IUint32_4>
314 static const char* get_type_name() {
return "Uint32<4>"; }
318 template<>
struct Type_traits<mi::IFloat32_2>
320 static const char* get_type_name() {
return "Float32<2>"; }
324 template<>
struct Type_traits<mi::IFloat32_3>
326 static const char* get_type_name() {
return "Float32<3>"; }
330 template<>
struct Type_traits<mi::IFloat32_4>
332 static const char* get_type_name() {
return "Float32<4>"; }
336 template<>
struct Type_traits<mi::IFloat64_2>
338 static const char* get_type_name() {
return "Float64<2>"; }
342 template<>
struct Type_traits<mi::IFloat64_3>
344 static const char* get_type_name() {
return "Float64<3>"; }
348 template<>
struct Type_traits<mi::IFloat64_4>
350 static const char* get_type_name() {
return "Float64<4>"; }
354 template<>
struct Type_traits<mi::IBoolean_2_2>
356 static const char* get_type_name() {
return "Boolean<2,2>"; }
360 template<>
struct Type_traits<mi::IBoolean_2_3>
362 static const char* get_type_name() {
return "Boolean<2,3>"; }
366 template<>
struct Type_traits<mi::IBoolean_2_4>
368 static const char* get_type_name() {
return "Boolean<2,4>"; }
372 template<>
struct Type_traits<mi::IBoolean_3_2>
374 static const char* get_type_name() {
return "Boolean<3,2>"; }
378 template<>
struct Type_traits<mi::IBoolean_3_3>
380 static const char* get_type_name() {
return "Boolean<3,3>"; }
384 template<>
struct Type_traits<mi::IBoolean_3_4>
386 static const char* get_type_name() {
return "Boolean<3,4>"; }
390 template<>
struct Type_traits<mi::IBoolean_4_2>
392 static const char* get_type_name() {
return "Boolean<4,2>"; }
396 template<>
struct Type_traits<mi::IBoolean_4_3>
398 static const char* get_type_name() {
return "Boolean<4,3>"; }
402 template<>
struct Type_traits<mi::IBoolean_4_4>
404 static const char* get_type_name() {
return "Boolean<4,4>"; }
408 template<>
struct Type_traits<mi::ISint32_2_2>
410 static const char* get_type_name() {
return "Sint32<2,2>"; }
414 template<>
struct Type_traits<mi::ISint32_2_3>
416 static const char* get_type_name() {
return "Sint32<2,3>"; }
420 template<>
struct Type_traits<mi::ISint32_2_4>
422 static const char* get_type_name() {
return "Sint32<2,4>"; }
426 template<>
struct Type_traits<mi::ISint32_3_2>
428 static const char* get_type_name() {
return "Sint32<3,2>"; }
432 template<>
struct Type_traits<mi::ISint32_3_3>
434 static const char* get_type_name() {
return "Sint32<3,3>"; }
438 template<>
struct Type_traits<mi::ISint32_3_4>
440 static const char* get_type_name() {
return "Sint32<3,4>"; }
444 template<>
struct Type_traits<mi::ISint32_4_2>
446 static const char* get_type_name() {
return "Sint32<4,2>"; }
450 template<>
struct Type_traits<mi::ISint32_4_3>
452 static const char* get_type_name() {
return "Sint32<4,3>"; }
456 template<>
struct Type_traits<mi::ISint32_4_4>
458 static const char* get_type_name() {
return "Sint32<4,4>"; }
462 template<>
struct Type_traits<mi::IUint32_2_2>
464 static const char* get_type_name() {
return "Uint32<2,2>"; }
468 template<>
struct Type_traits<mi::IUint32_2_3>
470 static const char* get_type_name() {
return "Uint32<2,3>"; }
474 template<>
struct Type_traits<mi::IUint32_2_4>
476 static const char* get_type_name() {
return "Uint32<2,4>"; }
480 template<>
struct Type_traits<mi::IUint32_3_2>
482 static const char* get_type_name() {
return "Uint32<3,2>"; }
486 template<>
struct Type_traits<mi::IUint32_3_3>
488 static const char* get_type_name() {
return "Uint32<3,3>"; }
492 template<>
struct Type_traits<mi::IUint32_3_4>
494 static const char* get_type_name() {
return "Uint32<3,4>"; }
498 template<>
struct Type_traits<mi::IUint32_4_2>
500 static const char* get_type_name() {
return "Uint32<4,2>"; }
504 template<>
struct Type_traits<mi::IUint32_4_3>
506 static const char* get_type_name() {
return "Uint32<4,3>"; }
510 template<>
struct Type_traits<mi::IUint32_4_4>
512 static const char* get_type_name() {
return "Uint32<4,4>"; }
516 template<>
struct Type_traits<mi::IFloat32_2_2>
518 static const char* get_type_name() {
return "Float32<2,2>"; }
522 template<>
struct Type_traits<mi::IFloat32_2_3>
524 static const char* get_type_name() {
return "Float32<2,3>"; }
528 template<>
struct Type_traits<mi::IFloat32_2_4>
530 static const char* get_type_name() {
return "Float32<2,4>"; }
534 template<>
struct Type_traits<mi::IFloat32_3_2>
536 static const char* get_type_name() {
return "Float32<3,2>"; }
540 template<>
struct Type_traits<mi::IFloat32_3_3>
542 static const char* get_type_name() {
return "Float32<3,3>"; }
546 template<>
struct Type_traits<mi::IFloat32_3_4>
548 static const char* get_type_name() {
return "Float32<3,4>"; }
552 template<>
struct Type_traits<mi::IFloat32_4_2>
554 static const char* get_type_name() {
return "Float32<4,2>"; }
558 template<>
struct Type_traits<mi::IFloat32_4_3>
560 static const char* get_type_name() {
return "Float32<4,3>"; }
564 template<>
struct Type_traits<mi::IFloat32_4_4>
566 static const char* get_type_name() {
return "Float32<4,4>"; }
570 template<>
struct Type_traits<mi::IFloat64_2_2>
572 static const char* get_type_name() {
return "Float64<2,2>"; }
576 template<>
struct Type_traits<mi::IFloat64_2_3>
578 static const char* get_type_name() {
return "Float64<2,3>"; }
582 template<>
struct Type_traits<mi::IFloat64_2_4>
584 static const char* get_type_name() {
return "Float64<2,4>"; }
588 template<>
struct Type_traits<mi::IFloat64_3_2>
590 static const char* get_type_name() {
return "Float64<3,2>"; }
594 template<>
struct Type_traits<mi::IFloat64_3_3>
596 static const char* get_type_name() {
return "Float64<3,3>"; }
600 template<>
struct Type_traits<mi::IFloat64_3_4>
602 static const char* get_type_name() {
return "Float64<3,4>"; }
606 template<>
struct Type_traits<mi::IFloat64_4_2>
608 static const char* get_type_name() {
return "Float64<4,2>"; }
612 template<>
struct Type_traits<mi::IFloat64_4_3>
614 static const char* get_type_name() {
return "Float64<4,3>"; }
618 template<>
struct Type_traits<mi::IFloat64_4_4>
620 static const char* get_type_name() {
return "Float64<4,4>"; }
624 template<>
struct Type_traits<mi::IColor>
626 static const char* get_type_name() {
return "Color"; }
630 template<>
struct Type_traits<mi::IColor3>
632 static const char* get_type_name() {
return "Color3"; }
636 template<>
struct Type_traits<mi::ISpectrum>
638 static const char* get_type_name() {
return "Spectrum"; }
642 template<>
struct Type_traits<mi::IBbox3>
644 static const char* get_type_name() {
return "Bbox3"; }
649 template<>
struct Type_traits<bool>
651 static const char* get_type_name() {
return "Boolean"; };
655 template<>
struct Type_traits<mi::
Sint8>
657 static const char* get_type_name() {
return "Sint8"; };
661 template<>
struct Type_traits<mi::
Sint16>
663 static const char* get_type_name() {
return "Sint16"; };
667 template<>
struct Type_traits<mi::
Sint32>
669 static const char* get_type_name() {
return "Sint32"; };
673 template<>
struct Type_traits<mi::
Sint64>
675 static const char* get_type_name() {
return "Sint64"; };
679 template<>
struct Type_traits<mi::
Uint8>
681 static const char* get_type_name() {
return "Uint8"; };
685 template<>
struct Type_traits<mi::
Uint16>
687 static const char* get_type_name() {
return "Uint16"; };
691 template<>
struct Type_traits<mi::
Uint32>
693 static const char* get_type_name() {
return "Uint32"; };
697 template<>
struct Type_traits<mi::
Uint64>
699 static const char* get_type_name() {
return "Uint64"; };
703 template<>
struct Type_traits<mi::
Float32>
705 static const char* get_type_name() {
return "Float32"; };
709 template<>
struct Type_traits<mi::
Float64>
711 static const char* get_type_name() {
return "Float64"; };
715 template<>
struct Type_traits<const char*>
717 static const char* get_type_name() {
return "String"; };
721 template<>
struct Type_traits<mi::base::Uuid>
723 static const char* get_type_name() {
return "Uuid"; };
727 template<>
struct Type_traits<void>
729 static const char* get_type_name() {
return "Void"; };
733 template<>
struct Type_traits<mi::math::Vector<bool,2> >
735 static const char* get_type_name() {
return "Boolean<2>"; };
739 template<>
struct Type_traits<mi::math::Vector<bool,3> >
741 static const char* get_type_name() {
return "Boolean<3>"; };
745 template<>
struct Type_traits<mi::math::Vector<bool,4> >
747 static const char* get_type_name() {
return "Boolean<4>"; };
751 template<>
struct Type_traits<mi::math::Vector<mi::Sint32,2> >
753 static const char* get_type_name() {
return "Sint32<2>"; };
757 template<>
struct Type_traits<mi::math::Vector<mi::Sint32,3> >
759 static const char* get_type_name() {
return "Sint32<3>"; };
763 template<>
struct Type_traits<mi::math::Vector<mi::Sint32,4> >
765 static const char* get_type_name() {
return "Sint32<4>"; };
769 template<>
struct Type_traits<mi::math::Vector<mi::Uint32,2> >
771 static const char* get_type_name() {
return "Uint32<2>"; };
775 template<>
struct Type_traits<mi::math::Vector<mi::Uint32,3> >
777 static const char* get_type_name() {
return "Uint32<3>"; };
781 template<>
struct Type_traits<mi::math::Vector<mi::Uint32,4> >
783 static const char* get_type_name() {
return "Uint32<4>"; };
787 template<>
struct Type_traits<mi::math::Vector<mi::Float32,2> >
789 static const char* get_type_name() {
return "Float32<2>"; };
793 template<>
struct Type_traits<mi::math::Vector<mi::Float32,3> >
795 static const char* get_type_name() {
return "Float32<3>"; };
799 template<>
struct Type_traits<mi::math::Vector<mi::Float32,4> >
801 static const char* get_type_name() {
return "Float32<4>"; };
805 template<>
struct Type_traits<mi::math::Vector<mi::Float64,2> >
807 static const char* get_type_name() {
return "Float64<2>"; };
811 template<>
struct Type_traits<mi::math::Vector<mi::Float64,3> >
813 static const char* get_type_name() {
return "Float64<3>"; };
817 template<>
struct Type_traits<mi::math::Vector<mi::Float64,4> >
819 static const char* get_type_name() {
return "Float64<4>"; };
823 template<>
struct Type_traits<mi::math::Matrix<bool,2,2> >
825 static const char* get_type_name() {
return "Boolean<2,2>"; };
829 template<>
struct Type_traits<mi::math::Matrix<bool,2,3> >
831 static const char* get_type_name() {
return "Boolean<2,3>"; };
835 template<>
struct Type_traits<mi::math::Matrix<bool,2,4> >
837 static const char* get_type_name() {
return "Boolean<2,4>"; };
841 template<>
struct Type_traits<mi::math::Matrix<bool,3,2> >
843 static const char* get_type_name() {
return "Boolean<3,2>"; };
847 template<>
struct Type_traits<mi::math::Matrix<bool,3,3> >
849 static const char* get_type_name() {
return "Boolean<3,3>"; };
853 template<>
struct Type_traits<mi::math::Matrix<bool,3,4> >
855 static const char* get_type_name() {
return "Boolean<3,4>"; };
859 template<>
struct Type_traits<mi::math::Matrix<bool,4,2> >
861 static const char* get_type_name() {
return "Boolean<4,2>"; };
865 template<>
struct Type_traits<mi::math::Matrix<bool,4,3> >
867 static const char* get_type_name() {
return "Boolean<4,3>"; };
871 template<>
struct Type_traits<mi::math::Matrix<bool,4,4> >
873 static const char* get_type_name() {
return "Boolean<4,4>"; };
877 template<>
struct Type_traits<mi::math::Matrix<mi::Sint32,2,2> >
879 static const char* get_type_name() {
return "Sint32<2,2>"; };
883 template<>
struct Type_traits<mi::math::Matrix<mi::Sint32,2,3> >
885 static const char* get_type_name() {
return "Sint32<2,3>"; };
889 template<>
struct Type_traits<mi::math::Matrix<mi::Sint32,2,4> >
891 static const char* get_type_name() {
return "Sint32<2,4>"; };
895 template<>
struct Type_traits<mi::math::Matrix<mi::Sint32,3,2> >
897 static const char* get_type_name() {
return "Sint32<3,2>"; };
901 template<>
struct Type_traits<mi::math::Matrix<mi::Sint32,3,3> >
903 static const char* get_type_name() {
return "Sint32<3,3>"; };
907 template<>
struct Type_traits<mi::math::Matrix<mi::Sint32,3,4> >
909 static const char* get_type_name() {
return "Sint32<3,4>"; };
913 template<>
struct Type_traits<mi::math::Matrix<mi::Sint32,4,2> >
915 static const char* get_type_name() {
return "Sint32<4,2>"; };
919 template<>
struct Type_traits<mi::math::Matrix<mi::Sint32,4,3> >
921 static const char* get_type_name() {
return "Sint32<4,3>"; };
925 template<>
struct Type_traits<mi::math::Matrix<mi::Sint32,4,4> >
927 static const char* get_type_name() {
return "Sint32<4,4>"; };
931 template<>
struct Type_traits<mi::math::Matrix<mi::Uint32,2,2> >
933 static const char* get_type_name() {
return "Uint32<2,2>"; };
937 template<>
struct Type_traits<mi::math::Matrix<mi::Uint32,2,3> >
939 static const char* get_type_name() {
return "Uint32<2,3>"; };
943 template<>
struct Type_traits<mi::math::Matrix<mi::Uint32,2,4> >
945 static const char* get_type_name() {
return "Uint32<2,4>"; };
949 template<>
struct Type_traits<mi::math::Matrix<mi::Uint32,3,2> >
951 static const char* get_type_name() {
return "Uint32<3,2>"; };
955 template<>
struct Type_traits<mi::math::Matrix<mi::Uint32,3,3> >
957 static const char* get_type_name() {
return "Uint32<3,3>"; };
961 template<>
struct Type_traits<mi::math::Matrix<mi::Uint32,3,4> >
963 static const char* get_type_name() {
return "Uint32<3,4>"; };
967 template<>
struct Type_traits<mi::math::Matrix<mi::Uint32,4,2> >
969 static const char* get_type_name() {
return "Uint32<4,2>"; };
973 template<>
struct Type_traits<mi::math::Matrix<mi::Uint32,4,3> >
975 static const char* get_type_name() {
return "Uint32<4,3>"; };
979 template<>
struct Type_traits<mi::math::Matrix<mi::Uint32,4,4> >
981 static const char* get_type_name() {
return "Uint32<4,4>"; };
985 template<>
struct Type_traits<mi::math::Matrix<mi::Float32,2,2> >
987 static const char* get_type_name() {
return "Float32<2,2>"; };
991 template<>
struct Type_traits<mi::math::Matrix<mi::Float32,2,3> >
993 static const char* get_type_name() {
return "Float32<2,3>"; };
997 template<>
struct Type_traits<mi::math::Matrix<mi::Float32,2,4> >
999 static const char* get_type_name() {
return "Float32<2,4>"; };
1003 template<>
struct Type_traits<mi::math::Matrix<mi::Float32,3,2> >
1005 static const char* get_type_name() {
return "Float32<3,2>"; };
1009 template<>
struct Type_traits<mi::math::Matrix<mi::Float32,3,3> >
1011 static const char* get_type_name() {
return "Float32<3,3>"; };
1015 template<>
struct Type_traits<mi::math::Matrix<mi::Float32,3,4> >
1017 static const char* get_type_name() {
return "Float32<3,4>"; };
1021 template<>
struct Type_traits<mi::math::Matrix<mi::Float32,4,2> >
1023 static const char* get_type_name() {
return "Float32<4,2>"; };
1027 template<>
struct Type_traits<mi::math::Matrix<mi::Float32,4,3> >
1029 static const char* get_type_name() {
return "Float32<4,3>"; };
1033 template<>
struct Type_traits<mi::math::Matrix<mi::Float32,4,4> >
1035 static const char* get_type_name() {
return "Float32<4,4>"; };
1039 template<>
struct Type_traits<mi::math::Matrix<mi::Float64,2,2> >
1041 static const char* get_type_name() {
return "Float64<2,2>"; };
1045 template<>
struct Type_traits<mi::math::Matrix<mi::Float64,2,3> >
1047 static const char* get_type_name() {
return "Float64<2,3>"; };
1051 template<>
struct Type_traits<mi::math::Matrix<mi::Float64,2,4> >
1053 static const char* get_type_name() {
return "Float64<2,4>"; };
1057 template<>
struct Type_traits<mi::math::Matrix<mi::Float64,3,2> >
1059 static const char* get_type_name() {
return "Float64<3,2>"; };
1063 template<>
struct Type_traits<mi::math::Matrix<mi::Float64,3,3> >
1065 static const char* get_type_name() {
return "Float64<3,3>"; };
1069 template<>
struct Type_traits<mi::math::Matrix<mi::Float64,3,4> >
1071 static const char* get_type_name() {
return "Float64<3,4>"; };
1075 template<>
struct Type_traits<mi::math::Matrix<mi::Float64,4,2> >
1077 static const char* get_type_name() {
return "Float64<4,2>"; };
1081 template<>
struct Type_traits<mi::math::Matrix<mi::Float64,4,3> >
1083 static const char* get_type_name() {
return "Float64<4,3>"; };
1087 template<>
struct Type_traits<mi::math::Matrix<mi::Float64,4,4> >
1089 static const char* get_type_name() {
return "Float64<4,4>"; };
1095 static const char* get_type_name() {
return "Color"; };
1101 static const char* get_type_name() {
return "Spectrum"; };
1105 template<>
struct Type_traits<mi::math::Bbox<mi::Float32,3> >
1107 static const char* get_type_name() {
return "Bbox3"; };
1112 template<
typename I, Size DIM>
struct Vector_type_traits {};
1114 template<>
struct Vector_type_traits<bool, 2>
1117 template<>
struct Vector_type_traits<bool, 3>
1120 template<>
struct Vector_type_traits<bool, 4>
1123 template<>
struct Vector_type_traits<mi::
Sint32, 2>
1126 template<>
struct Vector_type_traits<mi::
Sint32, 3>
1129 template<>
struct Vector_type_traits<mi::
Sint32, 4>
1132 template<>
struct Vector_type_traits<mi::
Float32, 2>
1135 template<>
struct Vector_type_traits<mi::
Float32, 3>
1138 template<>
struct Vector_type_traits<mi::
Float32, 4>
1141 template<>
struct Vector_type_traits<mi::
Float64, 2>
1144 template<>
struct Vector_type_traits<mi::
Float64, 3>
1147 template<>
struct Vector_type_traits<mi::
Float64, 4>
1151 template<
typename I, Size ROW, Size COL>
struct Matrix_type_traits {};
1153 template<>
struct Matrix_type_traits<bool, 2, 2>
1156 template<>
struct Matrix_type_traits<bool, 2, 3>
1159 template<>
struct Matrix_type_traits<bool, 2, 4>
1162 template<>
struct Matrix_type_traits<bool, 3, 2>
1165 template<>
struct Matrix_type_traits<bool, 3, 3>
1168 template<>
struct Matrix_type_traits<bool, 3, 4>
1171 template<>
struct Matrix_type_traits<bool, 4, 2>
1174 template<>
struct Matrix_type_traits<bool, 4, 3>
1177 template<>
struct Matrix_type_traits<bool, 4, 4>
1180 template<>
struct Matrix_type_traits<mi::
Sint32, 2, 2>
1183 template<>
struct Matrix_type_traits<mi::
Sint32, 2, 3>
1186 template<>
struct Matrix_type_traits<mi::
Sint32, 2, 4>
1189 template<>
struct Matrix_type_traits<mi::
Sint32, 3, 2>
1192 template<>
struct Matrix_type_traits<mi::
Sint32, 3, 3>
1195 template<>
struct Matrix_type_traits<mi::
Sint32, 3, 4>
1198 template<>
struct Matrix_type_traits<mi::
Sint32, 4, 2>
1201 template<>
struct Matrix_type_traits<mi::
Sint32, 4, 3>
1204 template<>
struct Matrix_type_traits<mi::
Sint32, 4, 4>
1207 template<>
struct Matrix_type_traits<mi::
Float32, 2, 2>
1210 template<>
struct Matrix_type_traits<mi::
Float32, 2, 3>
1213 template<>
struct Matrix_type_traits<mi::
Float32, 2, 4>
1216 template<>
struct Matrix_type_traits<mi::
Float32, 3, 2>
1219 template<>
struct Matrix_type_traits<mi::
Float32, 3, 3>
1222 template<>
struct Matrix_type_traits<mi::
Float32, 3, 4>
1225 template<>
struct Matrix_type_traits<mi::
Float32, 4, 2>
1228 template<>
struct Matrix_type_traits<mi::
Float32, 4, 3>
1231 template<>
struct Matrix_type_traits<mi::
Float32, 4, 4>
1234 template<>
struct Matrix_type_traits<mi::
Float64, 2, 2>
1237 template<>
struct Matrix_type_traits<mi::
Float64, 2, 3>
1240 template<>
struct Matrix_type_traits<mi::
Float64, 2, 4>
1243 template<>
struct Matrix_type_traits<mi::
Float64, 3, 2>
1246 template<>
struct Matrix_type_traits<mi::
Float64, 3, 3>
1249 template<>
struct Matrix_type_traits<mi::
Float64, 3, 4>
1252 template<>
struct Matrix_type_traits<mi::
Float64, 4, 2>
1255 template<>
struct Matrix_type_traits<mi::
Float64, 4, 3>
1258 template<>
struct Matrix_type_traits<mi::
Float64, 4, 4>
1265 #endif // MI_NEURAYLIB_TYPE_TRAITS_H