// add, will except if Key:Generation already exists

        public void Add(TKey key, TValue value)
        {
            if (!dictionary.ContainsKey(key))
            {
                dictionary[key] = new DictionaryWithFirstLastKey <uint, TValue>();
            }

            dictionary[key].Add(Generation, value);
            UpdatesAtThisGeneration++;
        }
        // set key to value at this generation

        public TValue this[TKey key] {
            set
            {
                if (!dictionary.ContainsKey(key))
                {
                    dictionary[key] = new DictionaryWithFirstLastKey <uint, TValue>();
                }

                dictionary[key][Generation] = value;
                UpdatesAtThisGeneration++;
            }
        }