1 package org.djutils.eval;
2
3 import org.djutils.metadata.MetaData;
4
5 /**
6 * F1.java. Minimal implementation of one-argument Function with description.
7 * <p>
8 * Copyright (c) 2023-2025 Delft University of Technology, Jaffalaan 5, 2628 BX Delft, the Netherlands. All rights reserved. See
9 * for project information <a href="https://djutils.org" target="_blank"> https://djutils.org</a>. The DJUTILS project is
10 * distributed under a three-clause BSD-style license, which can be found at
11 * <a href="https://djutils.org/docs/license.html" target="_blank"> https://djutils.org/docs/license.html</a>.
12 * </p>
13 * @author <a href="https://www.tudelft.nl/pknoppers">Peter Knoppers</a>
14 */
15 class F1 implements Function
16 {
17 /** Id of the function. */
18 final String id;
19
20 /** Type of the parameters of this function (also contains name and description). */
21 final MetaData metaData;
22
23 /** Type of the result of this function. */
24 final Class<?> resultClass;
25
26 /** The zero argument function. */
27 final OneArgumentFunction f1;
28
29 /**
30 * Construct a new one-argument function.
31 * @param id name of the function as it must be written in expressions
32 * @param resultClass the type of the result of the function
33 * @param metaData meta data of the function
34 * @param f1 one argument function
35 */
36 F1(final String id, final Class<?> resultClass, final MetaData metaData, final OneArgumentFunction f1)
37 {
38 this.id = id;
39 this.resultClass = resultClass;
40 this.metaData = metaData;
41 this.f1 = f1;
42 }
43
44 @Override
45 public String getId()
46 {
47 return this.id;
48 }
49
50 @Override
51 public MetaData getMetaData()
52 {
53 return this.metaData;
54 }
55
56 @Override
57 public Object function(final Object[] arguments) throws RuntimeException
58 {
59 return this.f1.execute(this, arguments[0]);
60 }
61
62 /**
63 * Interface for one argument functions.
64 */
65 interface OneArgumentFunction
66 {
67 /**
68 * Prototype of the one-argument function
69 * @param functionData meta data of the function
70 * @param argument the argument of the function
71 * @return the result type of the function
72 */
73 Object execute(Function functionData, Object argument);
74
75 }
76 }