Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
LazyHelper.cs
Go to the documentation of this file.
4
5namespace System;
6
7internal sealed class LazyHelper
8{
9 internal static readonly LazyHelper NoneViaConstructor = new LazyHelper(LazyState.NoneViaConstructor);
10
11 internal static readonly LazyHelper NoneViaFactory = new LazyHelper(LazyState.NoneViaFactory);
12
13 internal static readonly LazyHelper PublicationOnlyViaConstructor = new LazyHelper(LazyState.PublicationOnlyViaConstructor);
14
15 internal static readonly LazyHelper PublicationOnlyViaFactory = new LazyHelper(LazyState.PublicationOnlyViaFactory);
16
17 internal static readonly LazyHelper PublicationOnlyWaitForOtherThreadToPublish = new LazyHelper(LazyState.PublicationOnlyWait);
18
20
21 internal LazyState State { get; }
22
24 {
25 State = state;
26 }
27
29 {
30 switch (mode)
31 {
32 case LazyThreadSafetyMode.ExecutionAndPublication:
33 State = LazyState.ExecutionAndPublicationException;
34 break;
35 case LazyThreadSafetyMode.None:
36 State = LazyState.NoneException;
37 break;
38 case LazyThreadSafetyMode.PublicationOnly:
39 State = LazyState.PublicationOnlyException;
40 break;
41 }
43 }
44
45 [DoesNotReturn]
46 internal void ThrowException()
47 {
49 }
50
52 {
53 switch (State)
54 {
55 case LazyState.NoneViaConstructor:
56 case LazyState.NoneViaFactory:
57 case LazyState.NoneException:
58 return LazyThreadSafetyMode.None;
59 case LazyState.PublicationOnlyViaConstructor:
60 case LazyState.PublicationOnlyViaFactory:
61 case LazyState.PublicationOnlyWait:
62 case LazyState.PublicationOnlyException:
63 return LazyThreadSafetyMode.PublicationOnly;
64 case LazyState.ExecutionAndPublicationViaConstructor:
65 case LazyState.ExecutionAndPublicationViaFactory:
66 case LazyState.ExecutionAndPublicationException:
67 return LazyThreadSafetyMode.ExecutionAndPublication;
68 default:
69 return LazyThreadSafetyMode.None;
70 }
71 }
72
74 {
75 return state?.GetMode();
76 }
77
78 internal static bool GetIsValueFaulted(LazyHelper state)
79 {
80 return state?._exceptionDispatch != null;
81 }
82
83 internal static LazyHelper Create(LazyThreadSafetyMode mode, bool useDefaultConstructor)
84 {
85 switch (mode)
86 {
87 case LazyThreadSafetyMode.None:
88 if (!useDefaultConstructor)
89 {
90 return NoneViaFactory;
91 }
92 return NoneViaConstructor;
93 case LazyThreadSafetyMode.PublicationOnly:
94 if (!useDefaultConstructor)
95 {
97 }
99 case LazyThreadSafetyMode.ExecutionAndPublication:
100 {
101 LazyState state = (useDefaultConstructor ? LazyState.ExecutionAndPublicationViaConstructor : LazyState.ExecutionAndPublicationViaFactory);
102 return new LazyHelper(state);
103 }
104 default:
106 }
107 }
108
109 internal static T CreateViaDefaultConstructor<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicParameterlessConstructor)] T>()
110 {
111 try
112 {
113 return Activator.CreateInstance<T>();
114 }
116 {
118 }
119 }
120
121 internal static LazyThreadSafetyMode GetModeFromIsThreadSafe(bool isThreadSafe)
122 {
123 if (!isThreadSafe)
124 {
125 return LazyThreadSafetyMode.None;
126 }
127 return LazyThreadSafetyMode.ExecutionAndPublication;
128 }
129}
static ? object CreateInstance([DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors|DynamicallyAccessedMemberTypes.NonPublicConstructors)] Type type, BindingFlags bindingAttr, Binder? binder, object?[]? args, CultureInfo? culture)
Definition Activator.cs:17
LazyHelper(LazyState state)
Definition LazyHelper.cs:23
void ThrowException()
Definition LazyHelper.cs:46
static readonly LazyHelper NoneViaFactory
Definition LazyHelper.cs:11
static bool GetIsValueFaulted(LazyHelper state)
Definition LazyHelper.cs:78
static readonly LazyHelper PublicationOnlyWaitForOtherThreadToPublish
Definition LazyHelper.cs:17
static LazyThreadSafetyMode GetModeFromIsThreadSafe(bool isThreadSafe)
static readonly LazyHelper PublicationOnlyViaFactory
Definition LazyHelper.cs:15
LazyThreadSafetyMode GetMode()
Definition LazyHelper.cs:51
static ? LazyThreadSafetyMode GetMode(LazyHelper state)
Definition LazyHelper.cs:73
static readonly LazyHelper NoneViaConstructor
Definition LazyHelper.cs:9
readonly ExceptionDispatchInfo _exceptionDispatch
Definition LazyHelper.cs:19
static LazyHelper Create(LazyThreadSafetyMode mode, bool useDefaultConstructor)
Definition LazyHelper.cs:83
LazyHelper(LazyThreadSafetyMode mode, Exception exception)
Definition LazyHelper.cs:28
static readonly LazyHelper PublicationOnlyViaConstructor
Definition LazyHelper.cs:13
static ExceptionDispatchInfo Capture(Exception source)
static string Lazy_CreateValue_NoParameterlessCtorForT
Definition SR.cs:1598
static string Lazy_ctor_ModeInvalid
Definition SR.cs:1600
Definition SR.cs:7
LazyState
Definition LazyState.cs:4