Skip to content

Commit 3aff845

Browse files
committed
update Mat
1 parent b71f6d1 commit 3aff845

File tree

1 file changed

+170
-180
lines changed

1 file changed

+170
-180
lines changed

lib/src/core/mat.dart

Lines changed: 170 additions & 180 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)