View Javadoc
1   package org.djutils.eval;
2   
3   import org.djutils.metadata.MetaData;
4   
5   /**
6    * F0.java. Minimal implementation of zero-argument Function with description.
7    * <p>
8    * Copyright (c) 2023-2024 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 F0 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 ZeroArgumentFunction f0;
28  
29      /**
30       * Construct a new zero argument function.
31       * @param id String; name of the function as it must be written in expressions
32       * @param resultClass Class&lt;?&gt;; the type of the result of the function
33       * @param metaData MetaData; meta data of the function
34       * @param f0 ZeroArgumentFunction; zero argument function
35       */
36      F0(final String id, final Class<?> resultClass, final MetaData metaData, final ZeroArgumentFunction f0)
37      {
38          this.id = id;
39          this.resultClass = resultClass;
40          this.metaData = metaData;
41          this.f0 = f0;
42      }
43  
44      /**
45       * Construct a new zero-argument function with constant result.
46       * @param id String; name of the function as it must be written in expressions
47       * @param constantResult Object; the result of the zero argument function
48       * @param metaData MetaData; meta data of the function
49       */
50      F0(final String id, final Object constantResult, final MetaData metaData)
51      {
52          this(id, constantResult.getClass(), metaData, (f) -> constantResult);
53      }
54  
55      @Override
56      public String getId()
57      {
58          return this.id;
59      }
60  
61      @Override
62      public MetaData getMetaData()
63      {
64          return this.metaData;
65      }
66  
67      @Override
68      public Object function(final Object[] arguments) throws RuntimeException
69      {
70          return this.f0.execute(this);
71      }
72      
73      /**
74       * Interface for zero argument functions.
75       */
76      interface ZeroArgumentFunction
77      {
78          /**
79           * Prototype of the zero-argument function
80           * @param functionData Function; meta data of the function
81           * @return Object; the result type of the function
82           */
83          Object execute(Function functionData);
84      }
85  
86  }