Skip to content

Commit 93f135e

Browse files
committed
Revision #14
1 parent 830cf4e commit 93f135e

33 files changed

+636
-146
lines changed

Accessing/Accessing.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ public interface IRefReference<T> : IReadWriteAccessor<T>, IOutReference<T>
9090
/// </summary>
9191
public abstract class BasicAccessor<T> : MarshalByRefObject, IStorageAccessor
9292
{
93-
public Type Type{
93+
Type IStorageAccessor.Type{
9494
get{
9595
return typeof(T);
9696
}

Accessing/Accessor.cs

+4-4
Original file line numberDiff line numberDiff line change
@@ -38,19 +38,19 @@ public static ReadDictionaryAccessor<TKey, TValue> Access<TKey, TValue>(this IDi
3838
return new ReferenceAccessor<T>(ref value);
3939
}*/
4040

41-
public static IndexGetAccessor<TKey, TValue> Access<TKey, TValue>(this IIndexableGetter<TKey, TValue> indexable, TKey key)
41+
public static IndexGetAccessor<TKey, TValue> Access<TKey, TValue>(this IIndexGet<TKey, TValue> indexable, TKey key)
4242
{
4343
return new IndexGetAccessor<TKey, TValue>(indexable, key);
4444
}
4545

46-
public static IndexSetAccessor<TKey, TValue> Access<TKey, TValue>(this IIndexableSetter<TKey, TValue> indexable, TKey key)
46+
public static IndexSetAccessor<TKey, TValue> Access<TKey, TValue>(this IIndexSet<TKey, TValue> indexable, TKey key)
4747
{
4848
return new IndexSetAccessor<TKey, TValue>(indexable, key);
4949
}
5050

51-
public static IndexGetSetAccessor<TKey, TValue, TIndexable> Access<TKey, TValue, TIndexable>(this TIndexable indexable, TKey key) where TIndexable : IIndexableGetter<TKey, TValue>, IIndexableSetter<TKey, TValue>
51+
public static IndexGetSetAccessor<TKey, TValue> Access<TKey, TValue>(this IIndexGetSet<TKey, TValue> indexable, TKey key)
5252
{
53-
return new IndexGetSetAccessor<TKey, TValue, TIndexable>(indexable, key);
53+
return new IndexGetSetAccessor<TKey, TValue>(indexable, key);
5454
}
5555

5656
public static ReadFieldAccessor<T> Access<T>(this FieldInfo field, object target)

Accessing/ArrayAccessor.cs

+8
Original file line numberDiff line numberDiff line change
@@ -69,4 +69,12 @@ public interface IArrayAccessor : ICollectionAccessor
6969
{
7070
Array Array{get;}
7171
}
72+
73+
public static class ArrayAccessor
74+
{
75+
public static ArrayAccessor<T> Create<T>(T[] arr, int index)
76+
{
77+
return new ArrayAccessor<T>(arr, index);
78+
}
79+
}
7280
}

Accessing/AtomicContainer.cs

+19-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
namespace IllidanS4.SharpUtils.Accessing
99
{
10-
public class AtomicContainer<T> : BasicReadWriteAccessor<T>, IRefReference<T>, ITypedReference
10+
public class AtomicContainer<T> : BasicReadWriteAccessor<T>, IRefReference<T>, IAtomicContainer
1111
{
1212
public T Value;
1313

@@ -51,4 +51,22 @@ public TRet GetReference<TRet>(Func<SafeReference,TRet> func)
5151
return SafeReference.Create(__makeref(Value), func);
5252
}
5353
}
54+
55+
public interface IAtomicContainer : IReadWriteAccessor, ITypedReference
56+
{
57+
58+
}
59+
60+
public static class AtomicContainer
61+
{
62+
public static AtomicContainer<T> Create<T>()
63+
{
64+
return new AtomicContainer<T>();
65+
}
66+
67+
public static AtomicContainer<T> Create<T>(T value)
68+
{
69+
return new AtomicContainer<T>(value);
70+
}
71+
}
5472
}

Accessing/BoxedAccessor.cs

+6-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
namespace IllidanS4.SharpUtils.Accessing
66
{
7-
public class BoxedAccessor<T> : BasicReadWriteAccessor<T>, IRefReference<T>, ITypedReference where T : struct
7+
public class BoxedAccessor<T> : BasicReadWriteAccessor<T>, IRefReference<T>, IBoxedAccessor where T : struct
88
{
99
public ValueType Instance{get; private set;}
1010

@@ -48,4 +48,9 @@ public TRet GetReference<TRet>(Func<SafeReference,TRet> func)
4848
return SafeReference.GetBoxedReference(Instance, func);
4949
}
5050
}
51+
52+
public interface IBoxedAccessor : IReadWriteAccessor, ITypedReference
53+
{
54+
ValueType Instance{get;}
55+
}
5156
}

Accessing/DefinedReadAccessor.cs

+23-4
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,17 @@ namespace IllidanS4.SharpUtils.Accessing
55
/// <summary>
66
/// Read accessor that uses a passed function that returns its value.
77
/// </summary>
8-
public class DefinedReadAccessor<T> : BasicReadAccessor<T>
8+
public class DefinedReadAccessor<T> : BasicReadAccessor<T>, IDefinedReadAccessor
99
{
10-
Func<T> getter;
10+
public Func<T> Getter{get; private set;}
1111

1212
/// <summary>
1313
/// Creates a new read accessor using a getter function.
1414
/// </summary>
1515
/// <param name="getter">The getter function that returns the current value.</param>
1616
public DefinedReadAccessor(Func<T> getter)
1717
{
18-
this.getter = getter;
18+
Getter = getter;
1919
}
2020

2121
/// <summary>
@@ -38,8 +38,27 @@ public DefinedReadAccessor(T constant) : this(()=>constant)
3838

3939
public override T Item{
4040
get{
41-
return getter();
41+
return Getter();
4242
}
4343
}
44+
45+
MulticastDelegate IDefinedReadAccessor.Getter{
46+
get{
47+
return Getter;
48+
}
49+
}
50+
}
51+
52+
public interface IDefinedReadAccessor : IReadAccessor
53+
{
54+
MulticastDelegate Getter{get;}
55+
}
56+
57+
public static class DefinedReadAccessor
58+
{
59+
public static DefinedReadAccessor<T> Create<T>(Func<T> getter)
60+
{
61+
return new DefinedReadAccessor<T>(getter);
62+
}
4463
}
4564
}

Accessing/DefinedReadWriteAccessor.cs

+32-7
Original file line numberDiff line numberDiff line change
@@ -6,24 +6,49 @@ namespace IllidanS4.SharpUtils.Accessing
66
/// <summary>
77
/// Read-write accessor that uses a getter and setter method.
88
/// </summary>
9-
public class DefinedReadWriteAccessor<T> : BasicReadWriteAccessor<T>
9+
public class DefinedReadWriteAccessor<T> : BasicReadWriteAccessor<T>, IDefinedReadWriteAccessor
1010
{
11-
Func<T> getter;
12-
Action<T> setter;
11+
public Func<T> Getter{get; private set;}
12+
public Action<T> Setter{get; private set;}
1313

1414
public DefinedReadWriteAccessor(Func<T> getter, Action<T> setter)
1515
{
16-
this.getter = getter;
17-
this.setter = setter;
16+
Getter = getter;
17+
Setter = setter;
1818
}
1919

2020
public override T Item{
2121
get{
22-
return getter();
22+
return Getter();
2323
}
2424
set{
25-
setter(value);
25+
Setter(value);
2626
}
2727
}
28+
29+
MulticastDelegate IDefinedWriteAccessor.Setter{
30+
get{
31+
return Setter;
32+
}
33+
}
34+
35+
MulticastDelegate IDefinedReadAccessor.Getter{
36+
get{
37+
return Getter;
38+
}
39+
}
40+
}
41+
42+
public interface IDefinedReadWriteAccessor : IDefinedReadAccessor, IDefinedWriteAccessor, IReadWriteAccessor
43+
{
44+
45+
}
46+
47+
public static class DefinedReadWriteAccessor
48+
{
49+
public static DefinedReadWriteAccessor<T> Create<T>(Func<T> getter, Action<T> setter)
50+
{
51+
return new DefinedReadWriteAccessor<T>(getter, setter);
52+
}
2853
}
2954
}

Accessing/DefinedWriteAccessor.cs

+23-4
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,38 @@
22
using System;
33
namespace IllidanS4.SharpUtils.Accessing
44
{
5-
public class DefinedWriteAccessor<T> : BasicWriteAccessor<T>
5+
public class DefinedWriteAccessor<T> : BasicWriteAccessor<T>, IDefinedWriteAccessor
66
{
7-
Action<T> setter;
7+
public Action<T> Setter{get; private set;}
88

99
public DefinedWriteAccessor(Action<T> setter)
1010
{
11-
this.setter = setter;
11+
Setter = setter;
1212
}
1313

1414
public override T Item{
1515
set{
16-
setter(value);
16+
Setter(value);
1717
}
1818
}
19+
20+
MulticastDelegate IDefinedWriteAccessor.Setter{
21+
get{
22+
return Setter;
23+
}
24+
}
25+
}
26+
27+
public interface IDefinedWriteAccessor : IWriteAccessor
28+
{
29+
MulticastDelegate Setter{get;}
30+
}
31+
32+
public static class DefinedWriteAccessor
33+
{
34+
public static DefinedWriteAccessor<T> Create<T>(Action<T> setter)
35+
{
36+
return new DefinedWriteAccessor<T>(setter);
37+
}
1938
}
2039
}

Accessing/DictionaryAccessor.cs

+40-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
/* Date: 3.4.2015, Time: 20:41 */
22
using System;
3+
using System.Collections;
34
using System.Collections.Generic;
45
using System.Runtime.CompilerServices;
56

@@ -40,7 +41,7 @@ object IStrongBox.Value{
4041
}
4142
}
4243

43-
public class ReadDictionaryAccessor<TKey, TValue> : BasicReadAccessor<TValue>
44+
public class ReadDictionaryAccessor<TKey, TValue> : BasicReadAccessor<TValue>, IDictionaryAccessor
4445
{
4546
public IDictionary<TKey, TValue> Dictionary{get; private set;}
4647
public TKey Key{get; private set;}
@@ -56,5 +57,43 @@ public override TValue Item{
5657
return Dictionary[Key];
5758
}
5859
}
60+
61+
IEnumerable IDictionaryAccessor.Dictionary{
62+
get{
63+
return Dictionary;
64+
}
65+
}
66+
67+
object IDictionaryAccessor.Key{
68+
get{
69+
return Key;
70+
}
71+
}
72+
73+
Type IDictionaryAccessor.KeyType{
74+
get{
75+
return typeof(TKey);
76+
}
77+
}
78+
}
79+
80+
public interface IDictionaryAccessor : IReadAccessor
81+
{
82+
IEnumerable Dictionary{get;}
83+
object Key{get;}
84+
Type KeyType{get;}
85+
}
86+
87+
public static class DictionaryAccessor
88+
{
89+
public static DictionaryAccessor<TKey, TValue> Create<TKey, TValue>(IDictionary<TKey, TValue> dictionary, TKey key)
90+
{
91+
return new DictionaryAccessor<TKey, TValue>(dictionary, key);
92+
}
93+
94+
public static ReadDictionaryAccessor<TKey, TValue> CreateReadOnly<TKey, TValue>(IDictionary<TKey, TValue> dictionary, TKey key)
95+
{
96+
return new ReadDictionaryAccessor<TKey, TValue>(dictionary, key);
97+
}
5998
}
6099
}

Accessing/FieldAccessor.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
namespace IllidanS4.SharpUtils.Accessing
1010
{
11-
public sealed class FieldAccessor<T> : ReadFieldAccessor<T>, IReadWriteAccessor<T>, IRefReference<T>, ITypedReference
11+
public class FieldAccessor<T> : ReadFieldAccessor<T>, IReadWriteAccessor<T>, IRefReference<T>
1212
{
1313
readonly Action<T> setter;
1414

Accessing/IIndexReferable.cs

+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
/* Date: 29.4.2015, Time: 23:02 */
2+
using System;
3+
4+
namespace IllidanS4.SharpUtils.Accessing
5+
{
6+
/// <summary>
7+
/// Represents an indexable collections to which's elements references can be obtained.
8+
/// </summary>
9+
public interface IIndexRefReference<in TKey, TValue> : IIndexGetSet<TKey, TValue>, IIndexOutReference<TKey, TValue>, IIndexTypedReference<TKey>
10+
{
11+
TRet GetReference<TRet>(TKey index, Reference.RefFunc<TValue, TRet> func);
12+
}
13+
14+
public interface IIndexOutReference<in TKey, TValue> : IIndexSet<TKey, TValue>
15+
{
16+
TRet GetReference<TRet>(TKey index, Reference.OutFunc<TValue, TRet> func);
17+
}
18+
19+
public interface IIndexTypedReference<in TKey> : IIndexTypedReference
20+
{
21+
TRet GetReference<TRet>(TKey index, Func<SafeReference, TRet> func);
22+
}
23+
24+
public interface IIndexTypedReference
25+
{
26+
TRet GetReference<TRet>(object index, Func<SafeReference, TRet> func);
27+
}
28+
}

0 commit comments

Comments
 (0)