Example #1
0
 public static R Find <A, B, C, T, R>(this HashMap <A, HashMap <B, HashMap <C, T> > > self, A aKey, B bKey, C cKey,
                                      Func <T, R> Some, Func <R> None) =>
 self.Find(aKey,
           b => b.Find(bKey,
                       c => c.Find(cKey, Some, None),
                       None),
           None);
Example #2
0
        public static HashMap <A, HashMap <B, HashMap <C, HashMap <D, V> > > > TrySetItemT <A, B, C, D, V>(
            this HashMap <A, HashMap <B, HashMap <C, HashMap <D, V> > > > map, A aKey, B bKey, C cKey, D dKey, Func <V, V> Some)
        {
            var a = map.Find(aKey);

            if (a.IsNone)
            {
                return(map);
            }
            var av = a.Value;

            return(map.SetItem(aKey, av.TrySetItemT(bKey, cKey, dKey, Some)));
        }
Example #3
0
        public static HashMap <A, HashMap <B, V> > TrySetItemT <A, B, V>(this HashMap <A, HashMap <B, V> > map, A aKey, B bKey,
                                                                         V value)
        {
            var a = map.Find(aKey);

            if (a.IsNone)
            {
                return(map);
            }
            var av = a.Value;

            return(map.SetItem(aKey, av.TrySetItem(bKey, value)));
        }
Example #4
0
        public static HashMap <A, HashMap <B, HashMap <C, HashMap <D, V> > > > SetItemT <A, B, C, D, V>(
            this HashMap <A, HashMap <B, HashMap <C, HashMap <D, V> > > > map, A aKey, B bKey, C cKey, D dKey, Func <V, V> Some)
        {
            var a = map.Find(aKey);

            if (a.IsNone)
            {
                throw new ArgumentException("Key not found in Map");
            }
            var av = a.Value;

            return(map.SetItem(aKey, av.SetItemT(bKey, cKey, dKey, Some)));
        }
Example #5
0
        public static HashMap <A, HashMap <B, V> > SetItemT <A, B, V>(this HashMap <A, HashMap <B, V> > map, A aKey, B bKey,
                                                                      V value)
        {
            var a = map.Find(aKey);

            if (a.IsNone)
            {
                throw new ArgumentException("Key not found in Map");
            }
            var av = a.Value;

            return(map.SetItem(aKey, av.SetItem(bKey, value)));
        }
Example #6
0
        public static HashMap <A, HashMap <B, T> > Remove <A, B, T>(this HashMap <A, HashMap <B, T> > self, A outerKey,
                                                                    B innerKey)
        {
            var b = self.Find(outerKey);

            if (b.IsSome)
            {
                var bv = b.Value.Remove(innerKey);
                if (bv.Count() == 0)
                {
                    return(self.Remove(outerKey));
                }
                else
                {
                    return(self.SetItem(outerKey, bv));
                }
            }
            else
            {
                return(self);
            }
        }
Example #7
0
        public static HashMap <A, HashMap <B, HashMap <C, T> > > Remove <A, B, C, T>(
            this HashMap <A, HashMap <B, HashMap <C, T> > > self, A aKey, B bKey, C cKey)
        {
            var b = self.Find(aKey);

            if (b.IsSome)
            {
                var c = b.Value.Find(bKey);
                if (c.IsSome)
                {
                    var cv = c.Value.Remove(cKey);
                    if (cv.Count() == 0)
                    {
                        var bv = b.Value.Remove(bKey);
                        if (b.Value.Count() == 0)
                        {
                            return(self.Remove(aKey));
                        }
                        else
                        {
                            return(self.SetItem(aKey, bv));
                        }
                    }
                    else
                    {
                        return(self.SetItem(aKey, b.Value.SetItem(bKey, cv)));
                    }
                }
                else
                {
                    return(self);
                }
            }
            else
            {
                return(self);
            }
        }
Example #8
0
 public static R Find <A, B, T, R>(this HashMap <A, HashMap <B, T> > self, A outerKey, B innerKey, Func <T, R> Some,
                                   Func <R> None) =>
 self.Find(outerKey, b => b.Find(innerKey, Some, None), None);
Example #9
0
 public static Option <T> Find <A, B, C, T>(this HashMap <A, HashMap <B, HashMap <C, T> > > self, A aKey, B bKey,
                                            C cKey) =>
 self.Find(aKey, b => b.Find(bKey, c => c.Find(cKey), () => None), () => None);
Example #10
0
 public static Option <T> Find <A, B, T>(this HashMap <A, HashMap <B, T> > self, A outerKey, B innerKey) =>
 self.Find(outerKey, b => b.Find(innerKey), () => None);