1 /* 2 * Licensed to the Apache Software Foundation (ASF) under one or more 3 * contributor license agreements. See the NOTICE file distributed with 4 * this work for additional information regarding copyright ownership. 5 * The ASF licenses this file to You under the Apache License, Version 2.0 6 * (the "License"); you may not use this file except in compliance with 7 * the License. You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 */ 17 18 package org.apache.commons.rng.sampling.shape; 19 20 /** 21 * Utility class for common coordinate operations for shape samplers. 22 * 23 * @since 1.4 24 */ 25 final class Coordinates { 26 27 /** No public construction. */ 28 private Coordinates() {} 29 30 /** 31 * Check that the values are finite. This method is primarily for parameter 32 * validation in methods and constructors, for example: 33 * 34 * <pre> 35 * public Line(double[] start, double[] end) { 36 * this.start = Coordinates.requireFinite(start, "start"); 37 * this.end = Coordinates.requireFinite(end, "end"); 38 * } 39 * </pre> 40 * 41 * @param values the values 42 * @param message the message detail to prepend to the message in the event an exception is thrown 43 * @return the values 44 * @throws IllegalArgumentException if a non-finite value is found 45 */ 46 static double[] requireFinite(double[] values, String message) { 47 for (final double value : values) { 48 if (!Double.isFinite(value)) { 49 throw new IllegalArgumentException(message + " contains non-finite value: " + value); 50 } 51 } 52 return values; 53 } 54 55 /** 56 * Check that the values is the specified length. This method is primarily for 57 * parameter validation in methods and constructors, for example: 58 * 59 * <pre> 60 * public Square(double[] topLeft, double[] bottomRight) { 61 * this.topLeft = Coordinates.requireLength(topLeft, 2, "topLeft"); 62 * this.bottomRight = Coordinates.requireLength(bottomRight, 2, "bottomRight"); 63 * } 64 * </pre> 65 * 66 * @param values the values 67 * @param length the length 68 * @param message the message detail to prepend to the message in the event an 69 * exception is thrown 70 * @return the values 71 * @throws IllegalArgumentException if the array length is not the specified length 72 */ 73 static double[] requireLength(double[] values, int length, String message) { 74 if (values.length != length) { 75 throw new IllegalArgumentException(String.format("%s length mismatch: %d != %d", 76 message, values.length, length)); 77 } 78 return values; 79 } 80 }