/**
  * Create a buffer for one patch of the given double matrix. The returned buffer encompasses
  * <TT>theRowRange</TT> of rows, and <TT>theColRange</TT> of columns, in <TT>theMatrix</TT>. Each
  * range's stride may be 1 or greater than 1.
  *
  * @param theMatrix Matrix.
  * @param theRowRange Range of rows to include.
  * @param theColRange Range of columns to include.
  * @return Buffer.
  * @exception NullPointerException (unchecked exception) Thrown if <TT>theMatrix</TT> is null,
  *     <TT>theRowRange</TT> is null, or <TT>theColRange</TT> is null.
  * @exception IndexOutOfBoundsException (unchecked exception) Thrown if <TT>theMatrix</TT>'s
  *     allocation does not include <TT>theRowRange</TT> and <TT>theColRange</TT>.
  */
 public static DoubleBuf patchBuffer(double[][] theMatrix, Range theRowRange, Range theColRange) {
   if (theMatrix == null) {
     throw new NullPointerException("DoubleBuf.patchBuffer(): theMatrix is null");
   }
   int nr = Arrays.rowLength(theMatrix);
   if (0 > theRowRange.lb() || theRowRange.ub() >= nr) {
     throw new IndexOutOfBoundsException(
         "DoubleBuf.patchBuffer(): theMatrix row index range = 0.."
             + (nr - 1)
             + ", theRowRange = "
             + theRowRange);
   }
   int nc = Arrays.colLength(theMatrix, theRowRange.lb());
   if (0 > theColRange.lb() || theColRange.ub() >= nc) {
     throw new IndexOutOfBoundsException(
         "DoubleBuf.patchBuffer(): theMatrix column index range = 0.."
             + (nc - 1)
             + ", theColRange = "
             + theColRange);
   }
   if (theRowRange.stride() == 1 && theColRange.stride() == 1) {
     return new DoubleMatrixBuf_1(theMatrix, theRowRange, theColRange);
   } else {
     return new DoubleMatrixBuf(theMatrix, theRowRange, theColRange);
   }
 }
 /**
  * Create a buffer for one slice of the given shared double array. The returned buffer encompasses
  * <TT>theRange</TT> of elements in <TT>theArray</TT>. The range's stride may be 1 or greater than
  * 1.
  *
  * @param theArray Array.
  * @param theRange Range of elements to include.
  * @return Buffer.
  * @exception NullPointerException (unchecked exception) Thrown if <TT>theArray</TT> is null or
  *     <TT>theRange</TT> is null.
  * @exception IndexOutOfBoundsException (unchecked exception) Thrown if <TT>theArray</TT> does not
  *     include all the indexes in <TT>theRange</TT>.
  */
 public static DoubleBuf sliceBuffer(SharedDoubleArray theArray, Range theRange) {
   if (theArray == null) {
     throw new NullPointerException("DoubleBuf.sliceBuffer(): theArray is null");
   }
   int nr = theArray.length();
   if (0 > theRange.lb() || theRange.ub() >= nr) {
     throw new IndexOutOfBoundsException(
         "DoubleBuf.sliceBuffer(): theArray index range = 0.."
             + (nr - 1)
             + ", theRange = "
             + theRange);
   }
   if (theRange.stride() == 1) {
     return new SharedDoubleArrayBuf_1(theArray, theRange);
   } else {
     return new SharedDoubleArrayBuf(theArray, theRange);
   }
 }