public static HydratableGraveyard Restore(GraveyardMemento memento, HydratableGraveyard hydratable = null)
        {
            if (hydratable == null)
            {
                return(new HydratableGraveyard(memento));
            }

            hydratable.RestoreMemento(memento);
            return(hydratable);
        }
        public HydratableGraveyard(GraveyardMemento graveyard = null, int capacity = 1024 * 1024)
        {
            this.Key             = "/internal/graveyard";
            this.PendingMessages = new object[0];
            this.capacity        = capacity;
            var keys = graveyard == null ? new string[0] : graveyard.Keys;

            this.graveyard = new HashSet <string>(keys);
            this.window    = new Queue <string>(this.graveyard);
        }
        private void RestoreMemento(GraveyardMemento memento)
        {
            memento = memento ?? new GraveyardMemento(new string[0]);
            var keys = memento.Keys;

            this.graveyard.Clear();
            this.window.Clear();

            for (var i = 0; i < keys.Length; i++)
            {
                this.Bury(keys[i]);
            }
        }