public bool Commit(Belief belief) { lock (this) { CacheKey key = new CacheKey(belief.getTypeKey(), belief.getId()); CachedBelief oldCache = null; if (beliefCache.TryGetValue(key, out oldCache)) { BeliefMerger merger = new BeliefMerger(); Belief merged = merger.merge(oldCache.GetBelief(), belief); if (merged == oldCache.GetBelief()) { return(false); } belief = merged; } byte[] serialized = serializer.serializeBelief(belief); Hash hash = hashFunction.generateHash(serialized); CachedBelief cached = new CachedBelief(belief, serialized, hash); beliefCache[key] = cached; currentState = RegenerateState(); return(true); } }