FPURoundModeSelector.java

/*
 * Created on 2008/01/28
 * Copyright (C) 2008 Koga Laboratory. All rights reserved.
 *
 */
package org.mklab.cga.round;

import org.mklab.nfc.util.RoundMode;
import org.mklab.nfc.util.RoundModeSelector;


/**
 * {@link FPU}の計算の丸めモードを選択するためのクラスです。
 * 
 * @author Koga Laboratory
 * @version $Revision: 1.2 $, 2008/01/28
 */
public class FPURoundModeSelector implements RoundModeSelector {

  /**
   * @see org.mklab.nfc.util.RoundModeSelector#getRoundMode()
   */
  public RoundMode getRoundMode() {
    final int mode = FPU.getRoundMode();
    if (mode == FPU.ROUND_NEAR) {
      return RoundMode.ROUND_NEAR;
    }
    if (mode == FPU.ROUND_UP) {
      return RoundMode.ROUND_UP;
    }
    if (mode == FPU.ROUND_DOWN) {
      return RoundMode.ROUND_DOWN;
    }
    if (mode == FPU.ROUND_ZERO) {
      return RoundMode.ROUND_ZERO;
    }

    throw new IllegalArgumentException("Unkown round mode"); //$NON-NLS-1$
  }

  /**
   * @see org.mklab.nfc.util.RoundModeSelector#setRoundMode(org.mklab.nfc.util.RoundMode)
   */
  public void setRoundMode(final RoundMode mode) {
    switch (mode) {
      case ROUND_UP:
        FPU.setRoundMode(FPU.ROUND_UP);
        break;
      case ROUND_DOWN:
        FPU.setRoundMode(FPU.ROUND_DOWN);
        break;
      case ROUND_NEAR:
        FPU.setRoundMode(FPU.ROUND_NEAR);
        break;
      case ROUND_ZERO:
        FPU.setRoundMode(FPU.ROUND_ZERO);
        break;
    }
  }
}