Mega Code Archive

 
Categories / C# / Class Interface
 

A two-dimensional fail-soft array

/* C#: The Complete Reference  by Herbert Schildt  Publisher: Osborne/McGraw-Hill (March 8, 2002) ISBN: 0072134852 */ // A two-dimensional fail-soft array.    using System;    class FailSoftArray2D {     int[,] a; // reference to underlying 2D array     int rows, cols; // dimensions    public int Length; // Length is public      public bool errflag; // indicates outcome of last operation        // Construct array given its dimensions.    public FailSoftArray2D(int r, int c) {      rows = r;      cols = c;      a = new int[rows, cols];      Length = rows * cols;     }      // This is the indexer for FailSoftArray2D.    public int this[int index1, int index2] {      // This is the get accessor.      get {        if(ok(index1, index2)) {          errflag = false;          return a[index1, index2];        } else {          errflag = true;          return 0;        }      }        // This is the set accessor.      set {        if(ok(index1, index2)) {          a[index1, index2] = value;          errflag = false;        }        else errflag = true;      }    }      // Return true if indexes are within bounds.    private bool ok(int index1, int index2) {     if(index1 >= 0 & index1 < rows &        index2 >= 0 & index2 < cols)           return true;       return false;    }  }      // Demonstrate a 2D indexer.  public class TwoDIndexerDemo {     public static void Main() {       FailSoftArray2D fs = new FailSoftArray2D(3, 5);      int x;        // show quiet failures      Console.WriteLine("Fail quietly.");      for(int i=0; i < 6; i++)        fs[i, i] = i*10;        for(int i=0; i < 6; i++) {        x = fs[i,i];        if(x != -1) Console.Write(x + " ");      }      Console.WriteLine();        // now, generate failures      Console.WriteLine("\nFail with error reports.");      for(int i=0; i < 6; i++) {        fs[i,i] = i*10;        if(fs.errflag)          Console.WriteLine("fs[" + i + ", " + i + "] out-of-bounds");      }        for(int i=0; i < 6; i++) {        x = fs[i,i];        if(!fs.errflag) Console.Write(x + " ");        else          Console.WriteLine("fs[" + i + ", " + i + "] out-of-bounds");      }    }  }