class DefaultViewComputationCache implements ViewComputationCache,
    Iterable<Pair<ValueSpecification, FudgeMsg>> {

  @Override
  public Object getValue(final ValueSpecification specification) {
    ArgumentChecker.notNull(specification, "Specification");
    final long identifier = getIdentifierMap().getIdentifier(specification);
    FudgeMsg data = getPrivateDataStore().get(identifier);
    if (data == null) {
      data = getSharedDataStore().get(identifier);
    }
    if (data == null) {
      final MissingValueLoader loader = getMissingValueLoader();
      if (loader == null) {
        return null;
      }
      data = loader.findMissingValue(identifier);
      if (data == null) {
        return null;
      }
    }
    final FudgeDeserializer deserializer = new FudgeDeserializer(getFudgeContext());
    final Object obj = deserializeValue(deserializer, data);
    cacheValueSize(specification, data, obj);
    return obj;
  }

  protected  DefaultViewComputationCache(final IdentifierMap identifierMap, final FudgeMessageStore dataStore,
      final FudgeContext fudgeContext);
  public  DefaultViewComputationCache(final IdentifierMap identifierMap, final FudgeMessageStore privateDataStore,
      final FudgeMessageStore sharedDataStore, final FudgeContext fudgeContext);

}