private bool CompareMiniDict <T>(MiniDict <Flags, T> md, Dictionary <Flags, T> nd) { foreach (var pair in nd) { if (!pair.Value.Equals(nd[pair.Key])) { return(false); } } return(true); }
public ArchetypePool(Flags *flags, int[] sizes) { var allFlags = Flags.Join(flags, sizes.Length); archetypeFlags_ = allFlags; componentBuffers_ = new MiniDict <Flags, UntypedBuffer>(flags, sizes.Length); for (int i = 0; i < sizes.Length; i++) { componentBuffers_[flags[i]] = new UntypedBuffer(sizes[i], 4);//todo change starting size } Count = 0; }
public void Test() { const int qty = 20; var keys = new Flags[qty]; for (int i = 0; i < qty; i++) { keys[i] = new Flags(i); } var mDict = new MiniDict <Flags, int>(keys); var mDict2 = new MiniDict <Flags, int>(keys, Enumerable.Range(0, 20).ToArray()); var nDict = new Dictionary <Flags, int>(qty); for (int i = 0; i < qty; i++) { mDict[new Flags(i)] = i; } for (int i = 0; i < qty; i++) { nDict[new Flags(i)] = i; } Assert.True(CompareMiniDict(mDict, nDict)); Assert.True(CompareMiniDict(mDict2, nDict)); for (int i = 0; i < qty; i++) { mDict[new Flags(i)]++; } for (int i = 0; i < qty; i++) { mDict2[new Flags(i)]++; } for (int i = 0; i < qty; i++) { nDict[new Flags(i)]++; } Assert.True(CompareMiniDict(mDict, nDict)); Assert.True(CompareMiniDict(mDict2, nDict)); }
private static void StressMiniDict() { const int V = 20; var keys = new Flags[V]; for (int i = 0; i < V; i++) { keys[i] = new Flags(i); } var mDict = new MiniDict <Flags, int>(keys); var nDict = new Dictionary <Flags, int>(V); for (int i = 0; i < V; i++) { mDict[new Flags(i)] = i; } for (int i = 0; i < V; i++) { nDict[new Flags(i)] = i; } var sw = Stopwatch.StartNew(); const int V1 = 0xfffff; for (int i1 = 0; i1 < V1; i1++) { for (int i = 0; i < V; i++) { mDict[new Flags(i)]++; } } Console.WriteLine("m " + sw.ElapsedMilliseconds); sw.Restart(); for (int i1 = 0; i1 < V1; i1++) { for (int i = 0; i < V; i++) { nDict[new Flags(i)]++; } } Console.WriteLine(sw.ElapsedMilliseconds); sw.Restart(); for (int i1 = 0; i1 < V1; i1++) { for (int i = 0; i < V; i++) { mDict[new Flags(i)]++; } } Console.WriteLine("m " + sw.ElapsedMilliseconds); sw.Restart(); for (int i1 = 0; i1 < V1; i1++) { for (int i = 0; i < V; i++) { nDict[new Flags(i)]++; } } Console.WriteLine(sw.ElapsedMilliseconds); Console.ReadKey(); }