LibF77.java

package org.mklab.sdpj.gpack.f2clibs;

import org.mklab.nfc.matrix.ComplexNumericalMatrix;
import org.mklab.nfc.matrix.RealNumericalMatrix;
import org.mklab.nfc.scalar.ComplexNumericalScalar;
import org.mklab.nfc.scalar.RealNumericalScalar;


/**
 * @author koga
 * @version $Revision$, 2009/04/24
 */
public class LibF77 {

  /**
   * The function is the copy of string from STRING b to char[] a.
   * 
   * @param a a
   * @param b b
   * @param la la
   * @param lb lb
   */
  public static void copy(char[] a, String b, int la, int lb) {
    int count = 0;
    if (la <= lb) {
      while (count < la) {
        a[count] = b.charAt(count);
        count++;
      }
    }

    if (la > lb) {
      while (count < lb) {
        a[count] = b.charAt(count);
        count++;
      }
      while (count < la) {
        a[count++] = ' ';
      }
    }

  }

  /**
   * The function is to compare char[] a with String b. If the same ,return 0, others,return nonzero.
   * 
   * @param a a
   * @param b b
   * @param la la
   * @param lb lb
   * @return result
   */
  public static int compare(char[] a, String b, int la, int lb) {
    int count = 0;

    if (la <= lb) {
      while (count < la) {
        if (a[count] == b.charAt(count)) {
          count++;
        } else {
          return a[count] - b.charAt(count);
        }
      }
      while (count < lb) {
        if (b.charAt(count) == ' ') {
          count++;
        } else {
          return ' ' - b.charAt(count);
        }
      }
    }

    if (la > lb) {
      while (count < lb) {
        if (a[count] == b.charAt(count)) {
          count++;
        } else {
          return a[count] - b.charAt(count);
        }
      }
      while (count < la) {
        if (a[count] == ' ') {
          count++;
        } else {
          return a[count] - ' ';
        }
      }
    }

    return 0;

  }

  /**
   * @param <RS> 実スカラーの型
   * @param <RM> 実行列の型
   * @param <CS> 複素スカラーの型
   * @param <CM> 複素行列の型
   * @param a a
   * @param b b
   * @return result
   */
  public static <RS extends RealNumericalScalar<RS, RM, CS, CM>, RM extends RealNumericalMatrix<RS, RM, CS, CM>, CS extends ComplexNumericalScalar<RS, RM, CS, CM>, CM extends ComplexNumericalMatrix<RS, RM, CS, CM>> RS d_sign(
      RS a, RS b) {
    RS x = (a.isGreaterThanOrEquals(0) ? a : a.unaryMinus());
    return (b.isGreaterThanOrEquals(0) ? x : x.unaryMinus());
  }
}