Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
SecurePooledObject.cs
Go to the documentation of this file.
3
5
6internal sealed class SecurePooledObject<T>
7{
8 private readonly T _value;
9
10 private int _owner;
11
12 internal int Owner
13 {
14 get
15 {
16 return _owner;
17 }
18 set
19 {
20 _owner = value;
21 }
22 }
23
24 internal SecurePooledObject(T newValue)
25 {
26 Requires.NotNullAllowStructs(newValue, "newValue");
27 _value = newValue;
28 }
29
30 internal T Use<TCaller>(ref TCaller caller) where TCaller : struct, ISecurePooledObjectUser
31 {
32 if (!IsOwned(ref caller))
33 {
34 Requires.FailObjectDisposed(caller);
35 }
36 return _value;
37 }
38
39 internal bool TryUse<TCaller>(ref TCaller caller, [MaybeNullWhen(false)] out T value) where TCaller : struct, ISecurePooledObjectUser
40 {
41 if (IsOwned(ref caller))
42 {
43 value = _value;
44 return true;
45 }
46 value = default(T);
47 return false;
48 }
49
50 [MethodImpl(MethodImplOptions.AggressiveInlining)]
51 internal bool IsOwned<TCaller>(ref TCaller caller) where TCaller : struct, ISecurePooledObjectUser
52 {
53 return caller.PoolUserId == _owner;
54 }
55}
bool TryUse< TCaller >(ref TCaller caller, [MaybeNullWhen(false)] out T value)