Thank you to anyone who has already donated - your generous donations helped make three months of treatment possible.
My brother Nate continues to fight stage IV Hodgkin's lymphoma. He's just 31, with a wife and baby girl. They have no active income (since he's been unable to return to work), no insurance, and cannot afford the treatment he needs. Nate and his family need your help. Please consider a donation, every dollar helps. Thanks.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
{ { Sturk s = new Sturk(); s.frob = 42; s.baz = 24; Console.WriteLine("Main:13 " + s.ToString()); Ptr<Sturk> ps = s.GetPtr(); ReadIt(ps); ChangeIt(ps); ReadIt(ps); Action popit = PushIt(ps); DoSomething(ps, popit); } { Console.WriteLine("ReadIt: " + psturk.Deref.ToString()); } { psturk.Deref = new Sturk() { baz = -1, frob = 1 }; Console.WriteLine("ChangeIt: " + psturk.Deref.ToString()); } { var pop = Ext.Push(psturk); psturk.Deref = new Sturk() { frob = int.MaxValue, baz = int.MinValue }; Console.WriteLine("PushIt: " + psturk.Deref.ToString()); return pop; } { Console.WriteLine("DoSomething: " + psturk.ToString()); Console.WriteLine("Popit!"); popit(); Console.WriteLine("DoSomething: " + psturk.ToString()); } } public struct Sturk { public int frob; public int baz; { return string.Format("Sturk<{0}>: frob={1}, baz={2}", this.GetHashCode(), frob, baz); } } Func<T> getter; Action<T> setter; { getter = g; setter = s; } public T Deref { get { return getter(); } set { setter(value); } } { return this.Deref.ToString(); } } //doesn't work for structs since this is just syntatic sugar public static Ptr<T> GetPtr<T>(this T obj) { return new Ptr<T>( ()=> obj, v=> obj=v ); } //returns a Pop Action for later calling public static Action Push<T>(Ptr<T> pt) where T: struct { T pushedValue = pt.Deref; //copies the struct data return new Action( ()=> {pt.Deref = pushedValue;} ); } } } |