aboutsummaryrefslogtreecommitdiffstatsci
path: root/Samples/AnimTest/MiscUtil/NullOp.cs
diff options
context:
space:
mode:
authorJean-Philippe Bruyère <jp_bruyere@hotmail.com>2022-07-17 20:26:28 +0200
committerJean-Philippe Bruyère <jp_bruyere@hotmail.com>2022-07-17 20:26:28 +0200
commit9d786ab096ed36ea384e03ee5cea498790e31eec (patch)
treeadee54b5b90a35238d5794e9ffd3ebcf65798a06 /Samples/AnimTest/MiscUtil/NullOp.cs
parent57daad000aa31c7bcfa1f76b90d40da5a21da041 (diff)
wip
Diffstat (limited to 'Samples/AnimTest/MiscUtil/NullOp.cs')
-rw-r--r--Samples/AnimTest/MiscUtil/NullOp.cs59
1 files changed, 59 insertions, 0 deletions
diff --git a/Samples/AnimTest/MiscUtil/NullOp.cs b/Samples/AnimTest/MiscUtil/NullOp.cs
new file mode 100644
index 00000000..7bb8790a
--- /dev/null
+++ b/Samples/AnimTest/MiscUtil/NullOp.cs
@@ -0,0 +1,59 @@
+
+namespace MiscUtil
+{
+ interface INullOp<T>
+ {
+ bool HasValue(T value);
+ bool AddIfNotNull(ref T accumulator, T value);
+ }
+ sealed class StructNullOp<T>
+ : INullOp<T>, INullOp<T?>
+ where T : struct
+ {
+ public bool HasValue(T value)
+ {
+ return true;
+ }
+ public bool AddIfNotNull(ref T accumulator, T value)
+ {
+ accumulator = Operator<T>.Add(accumulator, value);
+ return true;
+ }
+ public bool HasValue(T? value)
+ {
+ return value.HasValue;
+ }
+ public bool AddIfNotNull(ref T? accumulator, T? value)
+ {
+ if (value.HasValue)
+ {
+ accumulator = accumulator.HasValue ?
+ Operator<T>.Add(
+ accumulator.GetValueOrDefault(),
+ value.GetValueOrDefault())
+ : value;
+ return true;
+ }
+ return false;
+ }
+ }
+ sealed class ClassNullOp<T>
+ : INullOp<T>
+ where T : class
+ {
+ public bool HasValue(T value)
+ {
+ return value != null;
+ }
+ public bool AddIfNotNull(ref T accumulator, T value)
+ {
+ if (value != null)
+ {
+ accumulator = accumulator == null ?
+ value : Operator<T>.Add(accumulator, value);
+ return true;
+ }
+ return false;
+ }
+ }
+} \ No newline at end of file