public static void Create(ref T value, Action <ReferenceAccessor <T> > act) { SafeReference.Create( ref value, r => act(new ReferenceAccessor <T>(r)) ); }
public static TRet Create <TRet>(ref T value, Func <ReferenceAccessor <T>, TRet> func) { return(SafeReference.Create( ref value, r => func(new ReferenceAccessor <T>(r)) )); }
public TRet GetReference <TRet>(int index, Func <SafeReference, TRet> func) { if (index < 0 || index >= count) { throw new ArgumentOutOfRangeException("index"); } return(SafeReference.Create(ref _items[index], func)); }
/// <summary> /// Pins a reference in a memory and constructs its pin handle. /// </summary> /// <param name="r">The reference to pin.</param> protected void ReferenceAction(SafeReference r) { using (var re1 = new AutoResetEvent(false)) { var thr = new Thread( delegate() { r.GetReference( //References are thread-unsafe! tr => { #if STORE_REFERENCE { SafeReference.Create( tr, r2 => { Reference = r2; re1.Set(); Reset.WaitOne(); } ); } #else { tr.Pin( delegate { re1.Set(); Reset.WaitOne(); } ); } #endif } ); } ); thr.Start(); re1.WaitOne(); } }
public TRet GetTempReference <TRet>(Func <SafeReference, TRet> func) { return(GetTempReference(tr => SafeReference.Create(tr, func))); }
public void GetTempReference(Action <SafeReference> act) { GetTempReference(tr => SafeReference.Create(tr, act)); }
public TRet GetReference <TRet>(Func <SafeReference, TRet> func) { return(TypedReferenceTools.MakeTypedReference(Target, new[] { Field }, tr => SafeReference.Create(tr, func))); }
/// <summary> /// Obtains a reference to an element in this array. /// </summary> public TRet GetReference <TRet>(int index, Func <SafeReference, TRet> func) { return(SafeReference.Create(ref array[index].Value, func)); }
/// <summary> /// Pins a reference in a memory and constructs its pin handle. /// </summary> /// <param name="obj">The reference to pin.</param> public RefPinHandle(ref T obj) { SafeReference.Create(ref obj, ReferenceAction); }
public TRet GetReference <TRet>(Func <SafeReference, TRet> func) { return(SafeReference.Create(__makeref(Array[Index]), func)); }
public TRet GetReference <TRet>(Func <SafeReference, TRet> func) { return(SafeReference.Create(__makeref(Value), func)); }