From 5c466b86cce0898956f970e163c8aed01703b162 Mon Sep 17 00:00:00 2001 From: yzk Date: Sat, 19 Dec 2020 19:54:13 +0800 Subject: [PATCH] add ResourcesTracker.cs --- src/OpenCvSharp/Util/ResourcesTracker.cs | 91 ++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 src/OpenCvSharp/Util/ResourcesTracker.cs diff --git a/src/OpenCvSharp/Util/ResourcesTracker.cs b/src/OpenCvSharp/Util/ResourcesTracker.cs new file mode 100644 index 000000000..3a329c141 --- /dev/null +++ b/src/OpenCvSharp/Util/ResourcesTracker.cs @@ -0,0 +1,91 @@ +using System; +using System.Collections.Generic; + +namespace OpenCvSharp.Util +{ + /// + /// Used for manage the resources of OpenCVSharp, like Mat, MatExpr, etc. + /// + public class ResourcesTracker : IDisposable + { + private ISet trackedObjects = new HashSet(); + private object asyncLock = new object(); + + /// + /// Trace the object obj, and return it + /// + /// + /// + /// + public TCV T(TCV obj) where TCV : DisposableObject + { + if (obj == null) + { + return obj; + } + lock (asyncLock) + { + trackedObjects.Add(obj); + } + return obj; + } + + /// + /// Trace an array of objects , and return them + /// + /// + /// + /// + + public TCV[] T(TCV[] objs) where TCV : DisposableObject + { + foreach (var obj in objs) + { + T(obj); + } + return objs; + } + + /// + /// Create a new Mat instance, and trace it + /// + /// + + public Mat NewMat() + { + return T(new Mat()); + } + + /// + /// Create a new Mat instance, and trace it + /// + /// size + /// matType + /// scalar + /// + + public Mat NewMat(Size size, MatType matType, Scalar scalar) + { + return T(new Mat(size, matType, scalar)); + } + + /// + /// Dispose all traced objects + /// + + public void Dispose() + { + lock (asyncLock) + { + foreach (var obj in trackedObjects) + { + if (obj.IsDisposed == false) + { + obj.Dispose(); + } + } + trackedObjects.Clear(); + } + } + } +}