Exemplo n.º 1
0
 public static void Create(ref T value, Action <ReferenceAccessor <T> > act)
 {
     SafeReference.Create(
         ref value,
         r => act(new ReferenceAccessor <T>(r))
         );
 }
Exemplo n.º 2
0
 public static TRet Create <TRet>(ref T value, Func <ReferenceAccessor <T>, TRet> func)
 {
     return(SafeReference.Create(
                ref value,
                r => func(new ReferenceAccessor <T>(r))
                ));
 }
Exemplo n.º 3
0
 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));
 }
Exemplo n.º 4
0
 /// <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();
     }
 }
Exemplo n.º 5
0
 public TRet GetTempReference <TRet>(Func <SafeReference, TRet> func)
 {
     return(GetTempReference(tr => SafeReference.Create(tr, func)));
 }
Exemplo n.º 6
0
 public void GetTempReference(Action <SafeReference> act)
 {
     GetTempReference(tr => SafeReference.Create(tr, act));
 }
Exemplo n.º 7
0
 public TRet GetReference <TRet>(Func <SafeReference, TRet> func)
 {
     return(TypedReferenceTools.MakeTypedReference(Target, new[] { Field }, tr => SafeReference.Create(tr, func)));
 }
Exemplo n.º 8
0
 /// <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));
 }
Exemplo n.º 9
0
 /// <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);
 }
Exemplo n.º 10
0
 public TRet GetReference <TRet>(Func <SafeReference, TRet> func)
 {
     return(SafeReference.Create(__makeref(Array[Index]), func));
 }
Exemplo n.º 11
0
 public TRet GetReference <TRet>(Func <SafeReference, TRet> func)
 {
     return(SafeReference.Create(__makeref(Value), func));
 }