@@ -324,111 +324,108 @@ class Mat extends CvStruct<cvg.Mat> {
324324 }
325325
326326 T atVec <T >(int row, int col) {
327- final v = cvRunArena <T >((arena) {
328- // Vec2b, Vec3b, Vec4b
329- if (T == Vec2b ) {
330- final p = calloc< cvg.Vec2b > ();
331- cvRun (() => CFFI .Mat_GetVec2b (ref, row, col, p));
332- return Vec2b .fromPointer (p) as T ;
333- } else if (T == Vec3b ) {
334- final p = calloc< cvg.Vec3b > ();
335- cvRun (() => CFFI .Mat_GetVec3b (ref, row, col, p));
336- return Vec3b .fromPointer (p) as T ;
337- } else if (T == Vec4b ) {
338- final p = calloc< cvg.Vec4b > ();
339- cvRun (() => CFFI .Mat_GetVec4b (ref, row, col, p));
340- return Vec4b .fromPointer (p) as T ;
341- }
342- // Vec2w, Vec3w, Vec4w
343- else if (T == Vec2w ) {
344- final p = calloc< cvg.Vec2w > ();
345- cvRun (() => CFFI .Mat_GetVec2w (ref, row, col, p));
346- return Vec2w .fromPointer (p) as T ;
347- } else if (T == Vec3w ) {
348- final p = calloc< cvg.Vec3w > ();
349- cvRun (() => CFFI .Mat_GetVec3w (ref, row, col, p));
350- return Vec3w .fromPointer (p) as T ;
351- } else if (T == Vec4w ) {
352- final p = calloc< cvg.Vec4w > ();
353- cvRun (() => CFFI .Mat_GetVec4w (ref, row, col, p));
354- return Vec4w .fromPointer (p) as T ;
355- }
356- // Vec2s, Vec3s, Vec4s
357- else if (T == Vec2s ) {
358- final p = calloc< cvg.Vec2s > ();
359- cvRun (() => CFFI .Mat_GetVec2s (ref, row, col, p));
360- return Vec2s .fromPointer (p) as T ;
361- } else if (T == Vec3s ) {
362- final p = calloc< cvg.Vec3s > ();
363- cvRun (() => CFFI .Mat_GetVec3s (ref, row, col, p));
364- return Vec3s .fromPointer (p) as T ;
365- } else if (T == Vec4s ) {
366- final p = calloc< cvg.Vec4s > ();
367- cvRun (() => CFFI .Mat_GetVec4s (ref, row, col, p));
368- return Vec4s .fromPointer (p) as T ;
369- }
370- // Vec2i, Vec3i, Vec4i, Vec6i, Vec8i
371- else if (T == Vec2i ) {
372- final p = calloc< cvg.Vec2i > ();
373- cvRun (() => CFFI .Mat_GetVec2i (ref, row, col, p));
374- return Vec2i .fromPointer (p) as T ;
375- } else if (T == Vec3i ) {
376- final p = calloc< cvg.Vec3i > ();
377- cvRun (() => CFFI .Mat_GetVec3i (ref, row, col, p));
378- return Vec3i .fromPointer (p) as T ;
379- } else if (T == Vec4i ) {
380- final p = calloc< cvg.Vec4i > ();
381- cvRun (() => CFFI .Mat_GetVec4i (ref, row, col, p));
382- return Vec4i .fromPointer (p) as T ;
383- } else if (T == Vec6i ) {
384- final p = calloc< cvg.Vec6i > ();
385- cvRun (() => CFFI .Mat_GetVec6i (ref, row, col, p));
386- return Vec6i .fromPointer (p) as T ;
387- } else if (T == Vec8i ) {
388- final p = calloc< cvg.Vec8i > ();
389- cvRun (() => CFFI .Mat_GetVec8i (ref, row, col, p));
390- return Vec8i .fromPointer (p) as T ;
391- }
392- // Vec2f, Vec3f, Vec4f, Vec6f
393- else if (T == Vec2f ) {
394- final p = calloc< cvg.Vec2f > ();
395- cvRun (() => CFFI .Mat_GetVec2f (ref, row, col, p));
396- return Vec2f .fromPointer (p) as T ;
397- } else if (T == Vec3f ) {
398- final p = calloc< cvg.Vec3f > ();
399- cvRun (() => CFFI .Mat_GetVec3f (ref, row, col, p));
400- return Vec3f .fromPointer (p) as T ;
401- } else if (T == Vec4f ) {
402- final p = calloc< cvg.Vec4f > ();
403- cvRun (() => CFFI .Mat_GetVec4f (ref, row, col, p));
404- return Vec4f .fromPointer (p) as T ;
405- } else if (T == Vec6f ) {
406- final p = calloc< cvg.Vec6f > ();
407- cvRun (() => CFFI .Mat_GetVec6f (ref, row, col, p));
408- return Vec6f .fromPointer (p) as T ;
409- }
410- // Vec2d, Vec3d, Vec4d, Vec6d
411- else if (T == Vec2d ) {
412- final p = calloc< cvg.Vec2d > ();
413- cvRun (() => CFFI .Mat_GetVec2d (ref, row, col, p));
414- return Vec2d .fromPointer (p) as T ;
415- } else if (T == Vec3d ) {
416- final p = calloc< cvg.Vec3d > ();
417- cvRun (() => CFFI .Mat_GetVec3d (ref, row, col, p));
418- return Vec3d .fromPointer (p) as T ;
419- } else if (T == Vec4d ) {
420- final p = calloc< cvg.Vec4d > ();
421- cvRun (() => CFFI .Mat_GetVec4d (ref, row, col, p));
422- return Vec4d .fromPointer (p) as T ;
423- } else if (T == Vec6d ) {
424- final p = calloc< cvg.Vec6d > ();
425- cvRun (() => CFFI .Mat_GetVec6d (ref, row, col, p));
426- return Vec6d .fromPointer (p) as T ;
427- } else {
428- throw UnsupportedError ("at<$T >() for $type is not supported!" );
429- }
430- });
431- return v;
327+ // Vec2b, Vec3b, Vec4b
328+ if (T == Vec2b ) {
329+ final p = calloc< cvg.Vec2b > ();
330+ cvRun (() => CFFI .Mat_GetVec2b (ref, row, col, p));
331+ return Vec2b .fromPointer (p) as T ;
332+ } else if (T == Vec3b ) {
333+ final p = calloc< cvg.Vec3b > ();
334+ cvRun (() => CFFI .Mat_GetVec3b (ref, row, col, p));
335+ return Vec3b .fromPointer (p) as T ;
336+ } else if (T == Vec4b ) {
337+ final p = calloc< cvg.Vec4b > ();
338+ cvRun (() => CFFI .Mat_GetVec4b (ref, row, col, p));
339+ return Vec4b .fromPointer (p) as T ;
340+ }
341+ // Vec2w, Vec3w, Vec4w
342+ else if (T == Vec2w ) {
343+ final p = calloc< cvg.Vec2w > ();
344+ cvRun (() => CFFI .Mat_GetVec2w (ref, row, col, p));
345+ return Vec2w .fromPointer (p) as T ;
346+ } else if (T == Vec3w ) {
347+ final p = calloc< cvg.Vec3w > ();
348+ cvRun (() => CFFI .Mat_GetVec3w (ref, row, col, p));
349+ return Vec3w .fromPointer (p) as T ;
350+ } else if (T == Vec4w ) {
351+ final p = calloc< cvg.Vec4w > ();
352+ cvRun (() => CFFI .Mat_GetVec4w (ref, row, col, p));
353+ return Vec4w .fromPointer (p) as T ;
354+ }
355+ // Vec2s, Vec3s, Vec4s
356+ else if (T == Vec2s ) {
357+ final p = calloc< cvg.Vec2s > ();
358+ cvRun (() => CFFI .Mat_GetVec2s (ref, row, col, p));
359+ return Vec2s .fromPointer (p) as T ;
360+ } else if (T == Vec3s ) {
361+ final p = calloc< cvg.Vec3s > ();
362+ cvRun (() => CFFI .Mat_GetVec3s (ref, row, col, p));
363+ return Vec3s .fromPointer (p) as T ;
364+ } else if (T == Vec4s ) {
365+ final p = calloc< cvg.Vec4s > ();
366+ cvRun (() => CFFI .Mat_GetVec4s (ref, row, col, p));
367+ return Vec4s .fromPointer (p) as T ;
368+ }
369+ // Vec2i, Vec3i, Vec4i, Vec6i, Vec8i
370+ else if (T == Vec2i ) {
371+ final p = calloc< cvg.Vec2i > ();
372+ cvRun (() => CFFI .Mat_GetVec2i (ref, row, col, p));
373+ return Vec2i .fromPointer (p) as T ;
374+ } else if (T == Vec3i ) {
375+ final p = calloc< cvg.Vec3i > ();
376+ cvRun (() => CFFI .Mat_GetVec3i (ref, row, col, p));
377+ return Vec3i .fromPointer (p) as T ;
378+ } else if (T == Vec4i ) {
379+ final p = calloc< cvg.Vec4i > ();
380+ cvRun (() => CFFI .Mat_GetVec4i (ref, row, col, p));
381+ return Vec4i .fromPointer (p) as T ;
382+ } else if (T == Vec6i ) {
383+ final p = calloc< cvg.Vec6i > ();
384+ cvRun (() => CFFI .Mat_GetVec6i (ref, row, col, p));
385+ return Vec6i .fromPointer (p) as T ;
386+ } else if (T == Vec8i ) {
387+ final p = calloc< cvg.Vec8i > ();
388+ cvRun (() => CFFI .Mat_GetVec8i (ref, row, col, p));
389+ return Vec8i .fromPointer (p) as T ;
390+ }
391+ // Vec2f, Vec3f, Vec4f, Vec6f
392+ else if (T == Vec2f ) {
393+ final p = calloc< cvg.Vec2f > ();
394+ cvRun (() => CFFI .Mat_GetVec2f (ref, row, col, p));
395+ return Vec2f .fromPointer (p) as T ;
396+ } else if (T == Vec3f ) {
397+ final p = calloc< cvg.Vec3f > ();
398+ cvRun (() => CFFI .Mat_GetVec3f (ref, row, col, p));
399+ return Vec3f .fromPointer (p) as T ;
400+ } else if (T == Vec4f ) {
401+ final p = calloc< cvg.Vec4f > ();
402+ cvRun (() => CFFI .Mat_GetVec4f (ref, row, col, p));
403+ return Vec4f .fromPointer (p) as T ;
404+ } else if (T == Vec6f ) {
405+ final p = calloc< cvg.Vec6f > ();
406+ cvRun (() => CFFI .Mat_GetVec6f (ref, row, col, p));
407+ return Vec6f .fromPointer (p) as T ;
408+ }
409+ // Vec2d, Vec3d, Vec4d, Vec6d
410+ else if (T == Vec2d ) {
411+ final p = calloc< cvg.Vec2d > ();
412+ cvRun (() => CFFI .Mat_GetVec2d (ref, row, col, p));
413+ return Vec2d .fromPointer (p) as T ;
414+ } else if (T == Vec3d ) {
415+ final p = calloc< cvg.Vec3d > ();
416+ cvRun (() => CFFI .Mat_GetVec3d (ref, row, col, p));
417+ return Vec3d .fromPointer (p) as T ;
418+ } else if (T == Vec4d ) {
419+ final p = calloc< cvg.Vec4d > ();
420+ cvRun (() => CFFI .Mat_GetVec4d (ref, row, col, p));
421+ return Vec4d .fromPointer (p) as T ;
422+ } else if (T == Vec6d ) {
423+ final p = calloc< cvg.Vec6d > ();
424+ cvRun (() => CFFI .Mat_GetVec6d (ref, row, col, p));
425+ return Vec6d .fromPointer (p) as T ;
426+ } else {
427+ throw UnsupportedError ("at<$T >() for $type is not supported!" );
428+ }
432429 }
433430
434431 /// cv::Mat::at\<T\>(i0, i1, i2) of cv::Mat
@@ -452,66 +449,64 @@ class Mat extends CvStruct<cvg.Mat> {
452449 }
453450
454451 void setVec <T >(int row, int col, T val) {
455- cvRunArena ((arena) {
456- // Vec2b, Vec3b, Vec4b
457- if (val is Vec2b ) {
458- cvRun (() => CFFI .Mat_SetVec2b (ref, row, col, val.ref));
459- } else if (val is Vec3b ) {
460- cvRun (() => CFFI .Mat_SetVec3b (ref, row, col, val.ref));
461- } else if (val is Vec4b ) {
462- cvRun (() => CFFI .Mat_SetVec4b (ref, row, col, val.ref));
463- }
464- // Vec2w, Vec3w, Vec4w
465- else if (val is Vec2w ) {
466- cvRun (() => CFFI .Mat_SetVec2w (ref, row, col, val.ref));
467- } else if (val is Vec3w ) {
468- cvRun (() => CFFI .Mat_SetVec3w (ref, row, col, val.ref));
469- } else if (val is Vec4w ) {
470- cvRun (() => CFFI .Mat_SetVec4w (ref, row, col, val.ref));
471- }
472- // Vec2s, Vec3s, Vec4s
473- else if (val is Vec2s ) {
474- cvRun (() => CFFI .Mat_SetVec2s (ref, row, col, val.ref));
475- } else if (val is Vec3s ) {
476- cvRun (() => CFFI .Mat_SetVec3s (ref, row, col, val.ref));
477- } else if (val is Vec4s ) {
478- cvRun (() => CFFI .Mat_SetVec4s (ref, row, col, val.ref));
479- }
480- // Vec2i, Vec3i, Vec4i, Vec6i, Vec8i
481- else if (val is Vec2i ) {
482- cvRun (() => CFFI .Mat_SetVec2i (ref, row, col, val.ref));
483- } else if (val is Vec3i ) {
484- cvRun (() => CFFI .Mat_SetVec3i (ref, row, col, val.ref));
485- } else if (val is Vec4i ) {
486- cvRun (() => CFFI .Mat_SetVec4i (ref, row, col, val.ref));
487- } else if (val is Vec6i ) {
488- cvRun (() => CFFI .Mat_SetVec6i (ref, row, col, val.ref));
489- } else if (val is Vec8i ) {
490- cvRun (() => CFFI .Mat_SetVec8i (ref, row, col, val.ref));
491- }
492- // Vec2f, Vec3f, Vec4f, Vec6f
493- else if (val is Vec2f ) {
494- cvRun (() => CFFI .Mat_SetVec2f (ref, row, col, val.ref));
495- } else if (val is Vec3f ) {
496- cvRun (() => CFFI .Mat_SetVec3f (ref, row, col, val.ref));
497- } else if (val is Vec4f ) {
498- cvRun (() => CFFI .Mat_SetVec4f (ref, row, col, val.ref));
499- } else if (val is Vec6f ) {
500- cvRun (() => CFFI .Mat_SetVec6f (ref, row, col, val.ref));
501- }
502- // Vec2d, Vec3d, Vec4d, Vec6d
503- else if (val is Vec2d ) {
504- cvRun (() => CFFI .Mat_SetVec2d (ref, row, col, val.ref));
505- } else if (val is Vec3d ) {
506- cvRun (() => CFFI .Mat_SetVec3d (ref, row, col, val.ref));
507- } else if (val is Vec4d ) {
508- cvRun (() => CFFI .Mat_SetVec4d (ref, row, col, val.ref));
509- } else if (val is Vec6d ) {
510- cvRun (() => CFFI .Mat_SetVec6d (ref, row, col, val.ref));
511- } else {
512- throw UnsupportedError ("at<$T >() for $type is not supported!" );
513- }
514- });
452+ // Vec2b, Vec3b, Vec4b
453+ if (val is Vec2b ) {
454+ cvRun (() => CFFI .Mat_SetVec2b (ref, row, col, val.ref));
455+ } else if (val is Vec3b ) {
456+ cvRun (() => CFFI .Mat_SetVec3b (ref, row, col, val.ref));
457+ } else if (val is Vec4b ) {
458+ cvRun (() => CFFI .Mat_SetVec4b (ref, row, col, val.ref));
459+ }
460+ // Vec2w, Vec3w, Vec4w
461+ else if (val is Vec2w ) {
462+ cvRun (() => CFFI .Mat_SetVec2w (ref, row, col, val.ref));
463+ } else if (val is Vec3w ) {
464+ cvRun (() => CFFI .Mat_SetVec3w (ref, row, col, val.ref));
465+ } else if (val is Vec4w ) {
466+ cvRun (() => CFFI .Mat_SetVec4w (ref, row, col, val.ref));
467+ }
468+ // Vec2s, Vec3s, Vec4s
469+ else if (val is Vec2s ) {
470+ cvRun (() => CFFI .Mat_SetVec2s (ref, row, col, val.ref));
471+ } else if (val is Vec3s ) {
472+ cvRun (() => CFFI .Mat_SetVec3s (ref, row, col, val.ref));
473+ } else if (val is Vec4s ) {
474+ cvRun (() => CFFI .Mat_SetVec4s (ref, row, col, val.ref));
475+ }
476+ // Vec2i, Vec3i, Vec4i, Vec6i, Vec8i
477+ else if (val is Vec2i ) {
478+ cvRun (() => CFFI .Mat_SetVec2i (ref, row, col, val.ref));
479+ } else if (val is Vec3i ) {
480+ cvRun (() => CFFI .Mat_SetVec3i (ref, row, col, val.ref));
481+ } else if (val is Vec4i ) {
482+ cvRun (() => CFFI .Mat_SetVec4i (ref, row, col, val.ref));
483+ } else if (val is Vec6i ) {
484+ cvRun (() => CFFI .Mat_SetVec6i (ref, row, col, val.ref));
485+ } else if (val is Vec8i ) {
486+ cvRun (() => CFFI .Mat_SetVec8i (ref, row, col, val.ref));
487+ }
488+ // Vec2f, Vec3f, Vec4f, Vec6f
489+ else if (val is Vec2f ) {
490+ cvRun (() => CFFI .Mat_SetVec2f (ref, row, col, val.ref));
491+ } else if (val is Vec3f ) {
492+ cvRun (() => CFFI .Mat_SetVec3f (ref, row, col, val.ref));
493+ } else if (val is Vec4f ) {
494+ cvRun (() => CFFI .Mat_SetVec4f (ref, row, col, val.ref));
495+ } else if (val is Vec6f ) {
496+ cvRun (() => CFFI .Mat_SetVec6f (ref, row, col, val.ref));
497+ }
498+ // Vec2d, Vec3d, Vec4d, Vec6d
499+ else if (val is Vec2d ) {
500+ cvRun (() => CFFI .Mat_SetVec2d (ref, row, col, val.ref));
501+ } else if (val is Vec3d ) {
502+ cvRun (() => CFFI .Mat_SetVec3d (ref, row, col, val.ref));
503+ } else if (val is Vec4d ) {
504+ cvRun (() => CFFI .Mat_SetVec4d (ref, row, col, val.ref));
505+ } else if (val is Vec6d ) {
506+ cvRun (() => CFFI .Mat_SetVec6d (ref, row, col, val.ref));
507+ } else {
508+ throw UnsupportedError ("at<$T >() for $type is not supported!" );
509+ }
515510 }
516511
517512 void setU8 (int row, int col, int val, [int ? i2]) => i2 == null
@@ -543,21 +538,16 @@ class Mat extends CvStruct<cvg.Mat> {
543538 : cvRun (() => CFFI .Mat_SetDouble3 (ref, row, col, i2, val));
544539
545540 void setNum <T extends num >(int row, int col, T val, [int ? i2]) {
546- using ((arena) {
547- final p = arena< ffi.Int > ();
548- cvRun (() => CFFI .Mat_Type (ref, p));
549- final depth = p.value & (MatType .CV_DEPTH_MAX - 1 );
550- return switch (depth) {
551- MatType .CV_8U => setU8 (row, col, val as int , i2),
552- MatType .CV_8S => setI8 (row, col, val as int , i2),
553- MatType .CV_16U => setU16 (row, col, val as int , i2),
554- MatType .CV_16S => setI16 (row, col, val as int , i2),
555- MatType .CV_32S => setI32 (row, col, val as int , i2),
556- MatType .CV_32F => setF32 (row, col, val as double , i2),
557- MatType .CV_64F => setF64 (row, col, val as double , i2),
558- _ => throw UnsupportedError ("Unsupported type: $type " )
559- };
560- });
541+ return switch (type.depth) {
542+ MatType .CV_8U => setU8 (row, col, val as int , i2),
543+ MatType .CV_8S => setI8 (row, col, val as int , i2),
544+ MatType .CV_16U => setU16 (row, col, val as int , i2),
545+ MatType .CV_16S => setI16 (row, col, val as int , i2),
546+ MatType .CV_32S => setI32 (row, col, val as int , i2),
547+ MatType .CV_32F => setF32 (row, col, val as double , i2),
548+ MatType .CV_64F => setF64 (row, col, val as double , i2),
549+ _ => throw UnsupportedError ("Unsupported type: $type " )
550+ };
561551 }
562552
563553 /// equivalent to Mat::at\<T\>(i0, i1, i2) = val;
0 commit comments