47 if (m_n_obj != IntPtr.Zero)
50 m_n_obj = IntPtr.Zero;
55 GC.SuppressFinalize(
this);
58 #region Object Invariant
60 private void ObjectInvariant()
62 Debug.Assert(this.m_ctx !=
null);
69 private IntPtr m_n_obj = IntPtr.Zero;
73 Debug.Assert(ctx !=
null);
77 internal Z3Object(
Context ctx, IntPtr obj)
79 Debug.Assert(ctx !=
null);
85 internal virtual void IncRef(IntPtr o) { }
86 internal virtual void DecRef(IntPtr o) { }
88 internal virtual void CheckNativeObject(IntPtr obj) { }
90 internal virtual IntPtr NativeObject
92 get {
return m_n_obj; }
95 if (value != IntPtr.Zero) { CheckNativeObject(value); IncRef(value); }
96 if (m_n_obj != IntPtr.Zero) { DecRef(m_n_obj); }
101 internal static IntPtr GetNativeObject(Z3Object s)
103 if (s ==
null)
return IntPtr.Zero;
104 return s.NativeObject;
118 internal static IntPtr[] ArrayToNative(
Z3Object[] a)
121 if (a ==
null)
return null;
122 IntPtr[] an =
new IntPtr[a.Length];
123 for (uint i = 0; i < a.Length; i++)
124 if (a[i] !=
null) an[i] = a[i].NativeObject;
128 internal static uint ArrayLength(Z3Object[] a)
130 return (a ==
null)?0:(uint)a.Length;
The main interaction with Z3 happens via the Context.