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());
}
}