Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
04/23/09 14:22:29 (15 years ago)
Author:
epitzer
Message:

Added PersistenceException used consistently for all error conditions in the persistence framework (#548)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.Persistence/3.3/Default/Decomposers/CompactNumberArray2StringDecomposer.cs

    r1623 r1625  
    6161
    6262    public object CreateInstance(Type type, IEnumerable<Tag> metaInfo) {
    63       var tagIter = metaInfo.GetEnumerator();
    64       tagIter.MoveNext();
    65       var valueIter = ((string)tagIter.Current.Value)
    66         .Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries)
    67         .GetEnumerator();
    68       valueIter.MoveNext();
    69       int rank = int.Parse((string)valueIter.Current);
    70       int[] lengths = new int[rank];
    71       int[] lowerBounds = new int[rank];
    72       for (int i = 0; i < rank; i++) {
     63      try {
     64        var tagIter = metaInfo.GetEnumerator();
     65        tagIter.MoveNext();     
     66        var valueIter = ((string)tagIter.Current.Value)
     67          .Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries)
     68          .GetEnumerator();
    7369        valueIter.MoveNext();
    74         lengths[i] = int.Parse((string)valueIter.Current);
    75       }
    76       for (int i = 0; i < rank; i++) {
    77         valueIter.MoveNext();
    78         lowerBounds[i] = int.Parse((string)valueIter.Current);
    79       }
    80       Type elementType = type.GetElementType();
    81       Array a = Array.CreateInstance(elementType, lengths, lowerBounds);
    82       int[] positions = (int[])lowerBounds.Clone();
    83       while (valueIter.MoveNext()) {
    84         a.SetValue(
    85           numberConverter.Parse((string)valueIter.Current, elementType),
    86           positions);
    87         positions[0] += 1;
    88         for (int i = 0; i < rank - 1; i++) {
    89           if (positions[i] >= lengths[i] + lowerBounds[i]) {
    90             positions[i + 1] += 1;
    91             positions[i] = lowerBounds[i];
    92           } else {
    93             break;
     70        int rank = int.Parse((string)valueIter.Current);
     71        int[] lengths = new int[rank];
     72        int[] lowerBounds = new int[rank];
     73        for (int i = 0; i < rank; i++) {
     74          valueIter.MoveNext();
     75          lengths[i] = int.Parse((string)valueIter.Current);
     76        }
     77        for (int i = 0; i < rank; i++) {
     78          valueIter.MoveNext();
     79          lowerBounds[i] = int.Parse((string)valueIter.Current);
     80        }
     81        Type elementType = type.GetElementType();
     82        Array a = Array.CreateInstance(elementType, lengths, lowerBounds);
     83        int[] positions = (int[])lowerBounds.Clone();
     84        while (valueIter.MoveNext()) {
     85          a.SetValue(
     86            numberConverter.Parse((string)valueIter.Current, elementType),
     87            positions);
     88          positions[0] += 1;
     89          for (int i = 0; i < rank - 1; i++) {
     90            if (positions[i] >= lengths[i] + lowerBounds[i]) {
     91              positions[i + 1] += 1;
     92              positions[i] = lowerBounds[i];
     93            } else {
     94              break;
     95            }
    9496          }
    9597        }
    96       }
    97       return a;
     98        return a;
     99      } catch (InvalidOperationException e) {
     100        throw new PersistenceException("Insufficient data to deserialize compact array", e);
     101      } catch (InvalidCastException e) {
     102        throw new PersistenceException("Invalid element data during compact array deserialization", e);
     103      }     
    98104    }
    99105
    100106    public void Populate(object instance, IEnumerable<Tag> tags, Type type) {
     107      // Nothing to do: Compact arrays are already populated during instance creation.
    101108    }
    102109
Note: See TracChangeset for help on using the changeset viewer.