class NodalDoublesCurve extends ArraysDoublesCurve {

  @Override
  public Double getYValue(final Double x) {
    ArgumentChecker.notNull(x, "x");
    final int index = Arrays.binarySearch(getXDataAsPrimitive(), x);
    if (index < 0) {
      throw new IllegalArgumentException("Curve does not contain data for x point " + x);
    }
    return getYDataAsPrimitive()[index];
  }

  protected  NodalDoublesCurve();
  public  NodalDoublesCurve(final double[] xData, final double[] yData, final boolean isSorted);
  public  NodalDoublesCurve(final Double[] xData, final Double[] yData, final boolean isSorted);
  public  NodalDoublesCurve(final Map<Double, Double> data, final boolean isSorted);
  public  NodalDoublesCurve(final DoublesPair[] data, final boolean isSorted);
  public  NodalDoublesCurve(final Set<DoublesPair> data, final boolean isSorted);
  public  NodalDoublesCurve(final List<Double> xData, final List<Double> yData, final boolean isSorted);
  public  NodalDoublesCurve(final List<DoublesPair> data, final boolean isSorted);
  public  NodalDoublesCurve(final double[] xData, final double[] yData, final boolean isSorted, final String name);
  public  NodalDoublesCurve(final Double[] xData, final Double[] yData, final boolean isSorted, final String name);
  public  NodalDoublesCurve(final Map<Double, Double> data, final boolean isSorted, final String name);
  public  NodalDoublesCurve(final DoublesPair[] data, final boolean isSorted, final String name);
  public  NodalDoublesCurve(final Set<DoublesPair> data, final boolean isSorted, final String name);
  public  NodalDoublesCurve(final List<Double> xData, final List<Double> yData, final boolean isSorted, final String name);
  public  NodalDoublesCurve(final List<DoublesPair> data, final boolean isSorted, final String name);

}