Skip to content

Commit 9d3e4ba

Browse files
committed
Replace Finalizable with ffi.NativeFinalizable
1 parent 840454e commit 9d3e4ba

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+443
-630
lines changed

ffigen.yaml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,7 @@ headers:
5656
functions:
5757
symbol-address:
5858
include:
59-
- "Mat_CloseVoid"
60-
# - ".*" # Do this to expose all function pointers.
59+
- ".*_Close.*"
6160
# exclude: # If you only use exclude, then everything not excluded is generated.
6261
# - "dispose"
6362

lib/src/contrib/aruco.dart

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import '../opencv.g.dart' as cvg;
1414

1515
class ArucoDetector extends CvStruct<cvg.ArucoDetector> {
1616
ArucoDetector._(cvg.ArucoDetectorPtr ptr) : super.fromPointer(ptr) {
17-
finalizer.attach(this, ptr);
17+
finalizer.attach(this, ptr.cast());
1818
}
1919

2020
factory ArucoDetector.empty() {
@@ -31,10 +31,7 @@ class ArucoDetector extends CvStruct<cvg.ArucoDetector> {
3131

3232
@override
3333
cvg.ArucoDetector get ref => ptr.ref;
34-
static final finalizer = Finalizer<cvg.ArucoDetectorPtr>((p) {
35-
CFFI.ArucoDetector_Close(p);
36-
calloc.free(p);
37-
});
34+
static final finalizer = OcvFinalizer<cvg.ArucoDetectorPtr>(CFFI.addresses.ArucoDetector_Close);
3835

3936
/// DetectMarkers does basic marker detection.
4037
///
@@ -74,7 +71,7 @@ void arucoGenerateImageMarker(
7471

7572
class ArucoDetectorParameters extends CvStruct<cvg.ArucoDetectorParameters> {
7673
ArucoDetectorParameters._(cvg.ArucoDetectorParametersPtr ptr) : super.fromPointer(ptr) {
77-
finalizer.attach(this, ptr);
74+
finalizer.attach(this, ptr.cast());
7875
}
7976

8077
factory ArucoDetectorParameters.empty() {
@@ -85,10 +82,7 @@ class ArucoDetectorParameters extends CvStruct<cvg.ArucoDetectorParameters> {
8582

8683
@override
8784
cvg.ArucoDetectorParameters get ref => ptr.ref;
88-
static final finalizer = Finalizer<cvg.ArucoDetectorParametersPtr>((p) {
89-
CFFI.ArucoDetectorParameters_Close(p);
90-
calloc.free(p);
91-
});
85+
static final finalizer = OcvFinalizer<cvg.ArucoDetectorParametersPtr>(CFFI.addresses.ArucoDetectorParameters_Close);
9286

9387
int get adaptiveThreshWinSizeMin {
9488
return cvRunArena<int>((arena) {

lib/src/contrib/aruco_dict.dart

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ enum PredefinedDictionaryType {
8282

8383
class ArucoDictionary extends CvStruct<cvg.ArucoDictionary> {
8484
ArucoDictionary._(cvg.ArucoDictionaryPtr ptr) : super.fromPointer(ptr) {
85-
finalizer.attach(this, ptr);
85+
finalizer.attach(this, ptr.cast());
8686
}
8787

8888
factory ArucoDictionary.predefined(PredefinedDictionaryType type) {
@@ -93,10 +93,7 @@ class ArucoDictionary extends CvStruct<cvg.ArucoDictionary> {
9393

9494
@override
9595
cvg.ArucoDictionary get ref => ptr.ref;
96-
static final finalizer = Finalizer<cvg.ArucoDictionaryPtr>((p0) {
97-
cvRun(() => CFFI.ArucoDictionary_Close(p0));
98-
calloc.free(p0);
99-
});
96+
static final finalizer = OcvFinalizer<cvg.ArucoDictionaryPtr>(CFFI.addresses.ArucoDictionary_Close);
10097

10198
@override
10299
List<int> get props => [ptr.address];

lib/src/contrib/img_hash.dart

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -74,12 +74,9 @@ const int BLOCK_MEAN_HASH_MODE_1 = 1;
7474
/// BlockMeanHash is implementation of the BlockMeanHash algorithm.
7575
class BlockMeanHash extends CvStruct<cvg.BlockMeanHash> implements ImgHashBase {
7676
BlockMeanHash._(cvg.BlockMeanHashPtr ptr, [this._mode = BLOCK_MEAN_HASH_MODE_0]) : super.fromPointer(ptr) {
77-
finalizer.attach(this, ptr);
77+
finalizer.attach(this, ptr.cast());
7878
}
79-
static final finalizer = Finalizer<ffi.Pointer<cvg.BlockMeanHash>>((p) {
80-
CFFI.BlockMeanHash_Close(p);
81-
calloc.free(p);
82-
});
79+
static final finalizer = OcvFinalizer<ffi.Pointer<cvg.BlockMeanHash>>(CFFI.addresses.BlockMeanHash_Close);
8380

8481
factory BlockMeanHash({int mode = BLOCK_MEAN_HASH_MODE_0}) {
8582
final p = calloc<cvg.BlockMeanHash>();

lib/src/core/array.dart

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ abstract class INativeArray<T> {
2727
class U8Array extends NativeArray<ffi.Uint8, int> {
2828
U8Array([int length = 0]) : super(length) {
2929
ptr = calloc<ffi.Uint8>(length);
30-
finalizer.attach(this, ptr);
30+
finalizer.attach(this, ptr.cast());
3131
}
3232

3333
factory U8Array.fromList(List<int> data) {
@@ -40,10 +40,10 @@ class U8Array extends NativeArray<ffi.Uint8, int> {
4040

4141
U8Array.fromPointer(ffi.Pointer<ffi.Uint8> ptr, int length) : super(length) {
4242
this.ptr = ptr;
43-
finalizer.attach(this, ptr);
43+
finalizer.attach(this, ptr.cast());
4444
}
4545

46-
static final finalizer = Finalizer<ffi.Pointer<ffi.Uint8>>((p) => calloc.free(p));
46+
static final finalizer = ffi.NativeFinalizer(calloc.nativeFree);
4747

4848
@override
4949
void operator []=(int idx, int value) {
@@ -65,7 +65,7 @@ class U8Array extends NativeArray<ffi.Uint8, int> {
6565
class I8Array extends NativeArray<ffi.Int8, int> {
6666
I8Array([int length = 0]) : super(length) {
6767
ptr = calloc<ffi.Int8>(length);
68-
finalizer.attach(this, ptr);
68+
finalizer.attach(this, ptr.cast());
6969
}
7070

7171
factory I8Array.fromList(List<int> data) {
@@ -76,7 +76,7 @@ class I8Array extends NativeArray<ffi.Int8, int> {
7676
return array;
7777
}
7878

79-
static final finalizer = Finalizer<ffi.Pointer<ffi.Int8>>((p) => calloc.free(p));
79+
static final finalizer = ffi.NativeFinalizer(calloc.nativeFree);
8080

8181
@override
8282
void operator []=(int idx, int value) {
@@ -98,7 +98,7 @@ class I8Array extends NativeArray<ffi.Int8, int> {
9898
class U16Array extends NativeArray<ffi.Uint16, int> {
9999
U16Array([int length = 0]) : super(length) {
100100
ptr = calloc<ffi.Uint16>(length);
101-
finalizer.attach(this, ptr);
101+
finalizer.attach(this, ptr.cast());
102102
}
103103

104104
factory U16Array.fromList(List<int> data) {
@@ -109,7 +109,7 @@ class U16Array extends NativeArray<ffi.Uint16, int> {
109109
return array;
110110
}
111111

112-
static final finalizer = Finalizer<ffi.Pointer<ffi.Uint16>>((p) => calloc.free(p));
112+
static final finalizer = ffi.NativeFinalizer(calloc.nativeFree);
113113

114114
@override
115115
void operator []=(int idx, int value) {
@@ -131,7 +131,7 @@ class U16Array extends NativeArray<ffi.Uint16, int> {
131131
class I16Array extends NativeArray<ffi.Int16, int> {
132132
I16Array([int length = 0]) : super(length) {
133133
ptr = calloc<ffi.Int16>(length);
134-
finalizer.attach(this, ptr);
134+
finalizer.attach(this, ptr.cast());
135135
}
136136

137137
factory I16Array.fromList(List<int> data) {
@@ -142,7 +142,7 @@ class I16Array extends NativeArray<ffi.Int16, int> {
142142
return array;
143143
}
144144

145-
static final finalizer = Finalizer<ffi.Pointer<ffi.Int16>>((p) => calloc.free(p));
145+
static final finalizer = ffi.NativeFinalizer(calloc.nativeFree);
146146

147147
@override
148148
void operator []=(int idx, int value) {
@@ -164,7 +164,7 @@ class I16Array extends NativeArray<ffi.Int16, int> {
164164
class I32Array extends NativeArray<ffi.Int, int> {
165165
I32Array([int length = 0]) : super(length) {
166166
ptr = calloc<ffi.Int>(length);
167-
finalizer.attach(this, ptr);
167+
finalizer.attach(this, ptr.cast());
168168
}
169169

170170
factory I32Array.fromList(List<int> data) {
@@ -175,7 +175,7 @@ class I32Array extends NativeArray<ffi.Int, int> {
175175
return array;
176176
}
177177

178-
static final finalizer = Finalizer<ffi.Pointer<ffi.Int>>((p) => calloc.free(p));
178+
static final finalizer = ffi.NativeFinalizer(calloc.nativeFree);
179179

180180
@override
181181
void operator []=(int idx, int value) {
@@ -197,7 +197,7 @@ class I32Array extends NativeArray<ffi.Int, int> {
197197
class F32Array extends NativeArray<ffi.Float, double> {
198198
F32Array([int length = 0]) : super(length) {
199199
ptr = calloc<ffi.Float>(length);
200-
finalizer.attach(this, ptr);
200+
finalizer.attach(this, ptr.cast());
201201
}
202202

203203
factory F32Array.fromList(List<double> data) {
@@ -208,7 +208,7 @@ class F32Array extends NativeArray<ffi.Float, double> {
208208
return array;
209209
}
210210

211-
static final finalizer = Finalizer<ffi.Pointer<ffi.Float>>((p) => calloc.free(p));
211+
static final finalizer = ffi.NativeFinalizer(calloc.nativeFree);
212212

213213
@override
214214
void operator []=(int idx, double value) {
@@ -230,7 +230,7 @@ class F32Array extends NativeArray<ffi.Float, double> {
230230
class F64Array extends NativeArray<ffi.Double, double> {
231231
F64Array([int length = 0]) : super(length) {
232232
ptr = calloc<ffi.Double>(length);
233-
finalizer.attach(this, ptr);
233+
finalizer.attach(this, ptr.cast());
234234
}
235235

236236
factory F64Array.fromList(List<double> data) {
@@ -241,7 +241,7 @@ class F64Array extends NativeArray<ffi.Double, double> {
241241
return array;
242242
}
243243

244-
static final finalizer = Finalizer<ffi.Pointer<ffi.Double>>((p) => calloc.free(p));
244+
static final finalizer = ffi.NativeFinalizer(calloc.nativeFree);
245245

246246
@override
247247
void operator []=(int idx, double value) {

lib/src/core/asyncarray.dart

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import '../opencv.g.dart' as cvg;
1010

1111
class AsyncArray extends CvStruct<cvg.AsyncArray> {
1212
AsyncArray._(cvg.AsyncArrayPtr ptr) : super.fromPointer(ptr) {
13-
finalizer.attach(this, ptr);
13+
finalizer.attach(this, ptr.cast());
1414
}
1515

1616
factory AsyncArray.fromPointer(cvg.AsyncArrayPtr ptr) => AsyncArray._(ptr);
@@ -22,10 +22,7 @@ class AsyncArray extends CvStruct<cvg.AsyncArray> {
2222
return arr;
2323
}
2424

25-
static final finalizer = Finalizer<cvg.AsyncArrayPtr>((p){
26-
CFFI.AsyncArray_Close(p);
27-
calloc.free(p);
28-
});
25+
static final finalizer = OcvFinalizer<cvg.AsyncArrayPtr>(CFFI.addresses.AsyncArray_Close);
2926

3027
Mat get() {
3128
final dst = Mat.empty();

lib/src/core/base.dart

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,7 @@ ffi.DynamicLibrary loadNativeLibrary() {
5050

5151
final CFFI = CvNative(loadNativeLibrary());
5252

53-
abstract class CvObject<T extends ffi.NativeType> implements ffi.Finalizable {
54-
}
53+
abstract class CvObject<T extends ffi.NativeType> implements ffi.Finalizable {}
5554

5655
abstract class ICvStruct<T extends ffi.Struct> extends CvObject<T> {
5756
ICvStruct.fromPointer(this.ptr);
@@ -95,6 +94,12 @@ R cvRunArena<R>(R Function(Arena arena) computation,
9594
}
9695
}
9796

97+
typedef NativeFinalizerFunctionT<T extends ffi.NativeType>
98+
= ffi.Pointer<ffi.NativeFunction<ffi.Void Function(T token)>>;
99+
100+
ffi.NativeFinalizer OcvFinalizer<T extends ffi.NativeType>(NativeFinalizerFunctionT<T> func) =>
101+
ffi.NativeFinalizer(func.cast<ffi.NativeFinalizerFunction>());
102+
98103
enum ImageFormat {
99104
// Windows bitmaps - *.bmp, *.dib (always supported)
100105
bmp(ext: ".bmp"),

0 commit comments

Comments
 (0)