001/*- 002 ******************************************************************************* 003 * Copyright (c) 2016 Diamond Light Source Ltd. 004 * All rights reserved. This program and the accompanying materials 005 * are made available under the terms of the Eclipse Public License v1.0 006 * which accompanies this distribution, and is available at 007 * http://www.eclipse.org/legal/epl-v10.html 008 * 009 * Contributors: 010 * Peter Chang - initial API and implementation and/or initial documentation 011 *******************************************************************************/ 012 013package org.eclipse.january.dataset; 014 015/** 016 * Interface to represent a unary operation for implementations over different output domains 017 * @since 2.0 018 */ 019public interface UnaryOperation extends IOperation { 020 021 /** 022 * @param a 023 * @return op(a) 024 */ 025 boolean booleanOperate(long a); 026 027 /** 028 * @param a 029 * @return op(a) 030 */ 031 long longOperate(long a); 032 033 /** 034 * @param a 035 * @return op(a)a 036 */ 037 double doubleOperate(double a); 038 039 /** 040 * @param out holds op(ra, ia) 041 * @param ra 042 * @param ia 043 */ 044 void complexOperate(double[] out, double ra, double ia); 045 046 /** 047 * @param a 048 * @return string to represent output 049 */ 050 String toString(String a); 051 052 /** 053 * Stub class where only two methods need to be overridden: 054 * {@link #complexOperate(double[], double, double)}, 055 * {@link #toString(String)} 056 */ 057 public static class Stub implements UnaryOperation { 058 double[] z = new double[2]; 059 060 @Override 061 public double doubleOperate(double a) { 062 complexOperate(z, a, 0); 063 return z[0]; 064 } 065 066 @Override 067 public boolean booleanOperate(long a) { 068 return doubleOperate(a) != 0; 069 } 070 071 @Override 072 public long longOperate(long a) { 073 return DTypeUtils.toLong(doubleOperate(a)); 074 } 075 076 /** 077 * Override this 078 */ 079 @Override 080 public void complexOperate(double[] out, double ra, double ia) { 081 } 082 083 /** 084 * Override this 085 */ 086 @Override 087 public String toString(String a) { 088 return null; 089 } 090 } 091}