public override int Serialize(ref byte[] bytes, int offset, KeyTuple <T1> value)
        {
            var startOffset = offset;

            offset += this.formatter1.Serialize(ref bytes, offset, value.Item1);
            return(offset - startOffset);
        }
Esempio n. 2
0
 public IEnumerable <TElement> this[KeyTuple <TKey1, TKey2, TKey3, TKey4, TKey5, TKey6> key]
 {
     get
     {
         return(this.innerMemory.FindMany(key));
     }
 }
Esempio n. 3
0
        public void Class()
        {
            var mc = new MyClass
            {
                MyReadOnlyListOne = new List <int> {
                    1, 10, 100, 1000
                },
                MyReadOnlyListTwo = new string[] { "a", "bcde", "fghijklmnop" },
                MyReadOnlyDictOne = new Dictionary <int, string> {
                    { 0, "a" }, { 100, "bcd" }
                },
                MyReadOnlyDictTwo = new Dictionary <KeyTuple <int, string>, string> {
                    { KeyTuple.Create(10, "aiueo"), "AAA" }, { KeyTuple.Create(999, "nano"), "sa" }
                }
            };

            var converted = ZeroFormatterSerializer.Convert(mc);

            converted.MyReadOnlyListOne.Is(1, 10, 100, 1000);
            converted.MyReadOnlyListTwo.Is("a", "bcde", "fghijklmnop");
            var r1 = converted.MyReadOnlyDictOne.OrderBy(x => x.Key).ToArray();

            r1[0].Key.Is(0); r1[0].Value.Is("a");
            r1[1].Key.Is(100); r1[1].Value.Is("bcd");

            var r2 = converted.MyReadOnlyDictTwo.OrderBy(x => x.Key.Item1).ToArray();

            r2[0].Key.Is(KeyTuple.Create(10, "aiueo")); r2[0].Value.Is("AAA");
            r2[1].Key.Is(KeyTuple.Create(999, "nano")); r2[1].Value.Is("sa");
        }
        public void KeyTupleFormatter()
        {
            var kc = new KeyTupleCheck();

            kc.KeyTupleDictionary = new Dictionary <KeyTuple <int, string>, MyClass>
            {
                { KeyTuple.Create(1, "aaa"), new MyClass {
                      Age = 10, FirstName = "hoge", LastName = "huga", MyList = new [] { 1, 10, 100 }
                  } },
                { KeyTuple.Create(9, "zzz"), new MyClass {
                      Age = 20, FirstName = "hage", LastName = "hnga", MyList = new [] { 3, 44, 200 }
                  } },
                { KeyTuple.Create(4, "vda"), new MyClass {
                      Age = 30, FirstName = "hbge", LastName = "hzga", MyList = new [] { 4, 33, 300 }
                  } }
            };

            var converted = ZeroFormatterSerializer.Convert(kc);

            converted.KeyTupleDictionary.Count.Is(3);

            var a = converted.KeyTupleDictionary[KeyTuple.Create(1, "aaa")];
            var b = converted.KeyTupleDictionary[KeyTuple.Create(9, "zzz")];
            var c = converted.KeyTupleDictionary[KeyTuple.Create(4, "vda")];

            a.Age.Is(10); a.FirstName.Is("hoge"); a.LastName.Is("huga"); a.MyList.IsCollection(1, 10, 100);
            b.Age.Is(20); b.FirstName.Is("hage"); b.LastName.Is("hnga"); b.MyList.IsCollection(3, 44, 200);
            c.Age.Is(30); c.FirstName.Is("hbge"); c.LastName.Is("hzga"); c.MyList.IsCollection(4, 33, 300);
        }
Esempio n. 5
0
        public void VariableReadOnlyList()
        {
            var bytes = new byte[1000];
            IReadOnlyList <string> variableList = new[] { "abcde", "fghijk" };
            var record = KeyTuple.Create("aiueo", variableList, "kakikukeko");

            var size = ZeroFormatterSerializer.Serialize(ref bytes, 33, record);

            var newBytes = new byte[2000];

            Buffer.BlockCopy(bytes, 33, newBytes, 99, size);

            var result = ZeroFormatterSerializer.Deserialize <KeyTuple <string, IList <string>, string> >(newBytes, 99);

            {
                result.Item1.Is("aiueo");
                var l = result.Item2;
                l.Count.Is(2);
                l[0].Is("abcde");
                l[1].Is("fghijk");
                result.Item3.Is("kakikukeko");
            }

            result.Item2[0] = "zzzzz"; // mutate

            var reconvert = ZeroFormatterSerializer.Convert(result);
            {
                reconvert.Item1.Is("aiueo");
                var l = reconvert.Item2;
                l.Count.Is(2);
                l[0].Is("zzzzz");
                l[1].Is("fghijk");
                reconvert.Item3.Is("kakikukeko");
            }
        }
Esempio n. 6
0
        public void FindManyMultiKey()
        {
            var data   = CreateData();
            var memory = CreateMemory(data);

            var secondary = memory.SecondaryIndex("FirstName.Age", x => KeyTuple.Create(x.FirstName, x.Age));

            secondary.FindMany(KeyTuple.Create("aaa", 89)).Select(x => x.Id).OrderBy(x => x).IsCollection(2, 4);
            secondary.FindMany(KeyTuple.Create("aaa", 89), false).Select(x => x.Id).OrderByDescending(x => x).IsCollection(4, 2);
        }
 public override int Serialize(ref byte[] bytes, int offset, KeyTuple <T1>?value)
 {
     BinaryUtil.WriteBoolean(ref bytes, offset, value.HasValue);
     if (value.HasValue)
     {
         var startOffset = offset;
         offset += 1;
         offset += this.formatter1.Serialize(ref bytes, offset, value.Value.Item1);
         return(offset - startOffset);
     }
     else
     {
         return(1);
     }
 }
Esempio n. 8
0
        public void MultiKeyFind()
        {
            var data      = CreateData();
            var memory    = CreateMemory(data);
            var secondary = memory.SecondaryIndex("FirstName.LastName", x => KeyTuple.Create(x.FirstName, x.LastName));

            foreach (var item in data)
            {
                var f = secondary.Find(KeyTuple.Create(item.FirstName, item.LastName));
                item.Id.Is(f.Id);
            }

            Assert.Throws <KeyNotFoundException>(() => secondary.Find(KeyTuple.Create("aaa", "___")));
            Assert.Throws <KeyNotFoundException>(() => secondary.Find(KeyTuple.Create("___", "foo")));

            secondary.FindOrDefault(KeyTuple.Create("aaa", "___")).IsNull();
            secondary.FindOrDefault(KeyTuple.Create("___", "foo")).IsNull();
        }
Esempio n. 9
0
        public void FindClosestMultiKey()
        {
            var data   = CreateData();
            var memory = CreateMemory(data);

            // Age of aaa
            //new Sample { Id = 5, Age = 19, FirstName = "aaa", LastName = "foo" },
            //new Sample { Id = 2, Age = 89, FirstName = "aaa", LastName = "bar" },
            //new Sample { Id = 4, Age = 89, FirstName = "aaa", LastName = "tako" },
            //new Sample { Id = 9, Age = 99, FirstName = "aaa", LastName = "ika" },

            var secondary = memory.SecondaryIndex("FirstName.Age", x => KeyTuple.Create(x.FirstName, x.Age));

            secondary.FindClosest(KeyTuple.Create("aaa", 10), true).Age.Is(19);
            secondary.FindClosest(KeyTuple.Create("aaa", 92), true).Age.Is(89);
            secondary.FindClosest(KeyTuple.Create("aaa", 120), true).Age.Is(99);
            secondary.FindClosest(KeyTuple.Create("aaa", 10), false).Age.Is(19);
            secondary.FindClosest(KeyTuple.Create("aaa", 73), false).Age.Is(89);
            secondary.FindClosest(KeyTuple.Create("aaa", 120), false).Age.Is(99);
        }
Esempio n. 10
0
        public static void Main(string[] args)
        {
            var mc = new WhatC
            {
                MyReadOnlyListOne = new List <int> {
                    1, 10, 100, 1000
                },
                MyReadOnlyListTwo = new string[] { "a", "bcde", "fghijklmnop" },
                MyReadOnlyDictOne = new Dictionary <int, string> {
                    { 0, "a" }, { 100, "bcd" }
                },
                MyReadOnlyDictTwo = new Dictionary <KeyTuple <int, string>, string> {
                    { KeyTuple.Create(10, "aiueo"), "AAA" }, { KeyTuple.Create(999, "nano"), "sa" }
                }
            };

            var converted = ZeroFormatterSerializer.Convert(mc);
            var huga      = converted.MyReadOnlyListOne;

            Console.WriteLine(huga[0]);
        }
Esempio n. 11
0
        public void KeyTupleTest()
        {
            {
                var t1 = KeyTuple.Create(100, 200, 300);
                var t2 = ZeroFormatterSerializer.Convert(t1);

                t2.Item1.Is(t1.Item1);
                t2.Item2.Is(t1.Item2);
                t2.Item3.Is(t1.Item3);
            }
            {
                var t1 = KeyTuple.Create(100, 200, 300, "aaa", "bbb", MyEnum.Fruit);
                var t2 = ZeroFormatterSerializer.Convert(t1);

                t2.Item1.Is(t1.Item1);
                t2.Item2.Is(t1.Item2);
                t2.Item3.Is(t1.Item3);
                t2.Item4.Is(t1.Item4);
                t2.Item5.Is(t1.Item5);
                t2.Item6.Is(t1.Item6);
            }
        }
Esempio n. 12
0
        public void ClassRelative()
        {
            var bytes         = new byte[1000];
            var variableField = new MyClass {
                Age = 99, FirstName = "aaa", LastName = "bbb"
            };
            var record = KeyTuple.Create("aiueo", variableField, "kakikukeko");

            var size = ZeroFormatterSerializer.Serialize(ref bytes, 33, record);

            var newBytes = new byte[2000];

            Buffer.BlockCopy(bytes, 33, newBytes, 99, size);

            var result = ZeroFormatterSerializer.Deserialize <KeyTuple <string, MyClass, string> >(newBytes, 99);

            {
                result.Item1.Is("aiueo");
                var l = result.Item2;
                l.Age.Is(99);
                l.FirstName.Is("aaa");
                l.LastName.Is("bbb");
                result.Item3.Is("kakikukeko");
            }

            result.Item2.LastName = "zzzzz"; // mutate

            var reconvert = ZeroFormatterSerializer.Convert(result);
            {
                reconvert.Item1.Is("aiueo");
                var l = reconvert.Item2;
                l.Age.Is(99);
                l.FirstName.Is("aaa");
                l.LastName.Is("zzzzz");
                reconvert.Item3.Is("kakikukeko");
            }
        }
Esempio n. 13
0
 public void RegisterSubType(object key, Type subType)
 {
     this.isStartRegister = true;
     this.subTypes.Add(KeyTuple.Create(key, subType));
 }
Esempio n. 14
0
        public bool Contains(KeyTuple <TKey1, TKey2, TKey3, TKey4, TKey5, TKey6> key)
        {
            TElement v;

            return(innerMemory.TryFind(key, out v));
        }
Esempio n. 15
0
        public void Unique()
        {
            var memory = CreateMemory(CreateData());

            var byIdAndAgeAndFirstNameAndLastName = memory.SecondaryIndex("AllIndex", x => KeyTuple.Create(x.Id, x.Age, x.FirstName, x.LastName));


            var byId                   = byIdAndAgeAndFirstNameAndLastName.UseIndex1();
            var byIdAndAge             = byIdAndAgeAndFirstNameAndLastName.UseIndex12();
            var byIdAndAgeAndFirstName = byIdAndAgeAndFirstNameAndLastName.UseIndex123();


            byId.Find(8).Id.Is(8);
            byId.FindOrDefault(100).IsNull();

            byIdAndAge.Find(4, 89).Id.Is(4);
            byIdAndAge.FindOrDefault(4, 899).IsNull();
            byIdAndAge.FindOrDefault(5, 89).IsNull();

            byIdAndAgeAndFirstName.Find(6, 29, "bbb").Id.Is(6);
            byIdAndAgeAndFirstName.FindOrDefault(6, 29, "bbbz").IsNull();
        }
Esempio n. 16
0
        public void Range()
        {
            var memory = CreateMemory(CreateData());

            var byFirstNameAndLastNameAndAge = memory.SecondaryIndex("FirstName.LastName.Age", x => KeyTuple.Create(x.FirstName, x.LastName, x.Age));

            var byFirstName            = byFirstNameAndLastNameAndAge.UseIndex1();
            var byFirstNameAndLastName = byFirstNameAndLastNameAndAge.UseIndex12();

            byFirstName.FindMany("eee").Select(x => x.Id).OrderBy(x => x).Is(1, 10);
            byFirstName.FindMany("eeee").Count.Is(0);

            byFirstNameAndLastName.FindMany("aaa", "foo").Select(x => x.Id).OrderBy(x => x).Is(5);

            byFirstNameAndLastName.FindClosest("aaa", "takz").Id.Is(4);
        }
 public int GetHashCode(KeyTuple <T1> obj)
 {
     return(ZeroFormatterEqualityComparer <T1> .Default.GetHashCode(obj.Item1));
 }
 public bool Equals(KeyTuple <T1> x, KeyTuple <T1> y)
 {
     return(ZeroFormatterEqualityComparer <T1> .Default.Equals(x.Item1, y.Item1));
 }