blob: c15a8b4476977d7d3b1d4fe518bac7b96eabde38 [file] [log] [blame]
<!DOCTYPE HTML>
<html lang="en">
<head>
<!-- Generated by javadoc (21) on Thu Oct 05 19:54:57 CEST 2023 -->
<title>Optimization.OnExpression (Apache SIS 1.4 API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="dc.created" content="2023-10-05">
<meta name="description" content="declaration: module: org.apache.sis.feature, package: org.apache.sis.filter, class: Optimization, interface: OnExpression">
<meta name="generator" content="javadoc/ClassWriterImpl">
<meta name="keywords" content="org.apache.sis.filter.Optimization.OnExpression interface">
<meta name="keywords" content="optimize()">
<meta name="keywords" content="recreate()">
<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../sis.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../script-dir/jquery-ui.min.css" title="Style">
<script type="text/javascript" src="../../../../../script.js"></script>
<script type="text/javascript" src="../../../../../script-dir/jquery-3.6.1.min.js"></script>
<script type="text/javascript" src="../../../../../script-dir/jquery-ui.min.js"></script>
</head>
<body class="class-declaration-page">
<script type="text/javascript">var pathtoroot = "../../../../../";
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<div class="flex-box">
<header role="banner" class="flex-header">
<nav role="navigation">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="top-nav" id="navbar-top"><button id="navbar-toggle-button" aria-controls="navbar-top" aria-expanded="false" aria-label="Toggle navigation links"><span class="nav-bar-toggle-icon">&nbsp;</span><span class="nav-bar-toggle-icon">&nbsp;</span><span class="nav-bar-toggle-icon">&nbsp;</span></button>
<div class="skip-nav"><a href="#skip-navbar-top" title="Skip navigation links">Skip navigation links</a></div>
<ul id="navbar-top-firstrow" class="nav-list" title="Navigation">
<li><a href="../../../../../index.html">Overview</a></li>
<li><a href="../../../../module-summary.html">Module</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="nav-bar-cell1-rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../help-doc.html#class">Help</a></li>
</ul>
<ul class="sub-nav-list-small">
<li>
<p>Summary:</p>
<ul>
<li>Nested</li>
<li>Field</li>
<li>Constr</li>
<li><a href="#method-summary">Method</a></li>
</ul>
</li>
<li>
<p>Detail:</p>
<ul>
<li>Field</li>
<li>Constr</li>
<li><a href="#method-detail">Method</a></li>
</ul>
</li>
</ul>
</div>
<div class="sub-nav">
<div id="navbar-sub-list">
<ul class="sub-nav-list">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method-summary">Method</a></li>
</ul>
<ul class="sub-nav-list">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method-detail">Method</a></li>
</ul>
</div>
<div class="nav-list-search"><a href="../../../../../search.html">SEARCH</a>
<input type="text" id="search-input" disabled placeholder="Search">
<input type="reset" id="reset-button" disabled value="reset">
</div>
</div>
<!-- ========= END OF TOP NAVBAR ========= -->
<span class="skip-nav" id="skip-navbar-top"></span></nav>
</header>
<div class="flex-content">
<main role="main">
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="sub-title"><span class="module-label-in-type">Module</span>&nbsp;<a href="../../../../module-summary.html">org.apache.sis.feature</a></div>
<div class="sub-title"><span class="package-label-in-type">Package</span>&nbsp;<a href="package-summary.html">org.apache.sis.filter</a></div>
<h1 title="Interface Optimization.OnExpression" class="title">Interface Optimization.OnExpression&lt;R,<wbr>V&gt;</h1>
</div>
<section class="class-description" id="class-description">
<dl class="notes">
<dt>Type Parameters:</dt>
<dd><code>R</code> - the type of resources used as inputs.</dd>
<dd><code>V</code> - the type of values computed by the expression.</dd>
</dl>
<dl class="notes">
<dt>All Superinterfaces:</dt>
<dd><code><a href="Expression.html" title="interface in org.apache.sis.filter">Expression</a>&lt;R,<wbr>V&gt;</code>, <code><a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/function/Function.html" title="class or interface in java.util.function" class="external-link">Function</a>&lt;R,<wbr>V&gt;</code></dd>
</dl>
<dl class="notes">
<dt>Enclosing class:</dt>
<dd><code><a href="Optimization.html" title="class in org.apache.sis.filter">Optimization</a></code></dd>
</dl>
<hr>
<div class="type-signature"><span class="modifiers">public static interface </span><span class="element-name type-name-label">Optimization.OnExpression&lt;R,<wbr>V&gt;</span><span class="extends-implements">
extends <a href="Expression.html" title="interface in org.apache.sis.filter">Expression</a>&lt;R,<wbr>V&gt;</span></div>
<div class="block">Expression that can be optimized. Each expression implementation knows which rules can be applied.
For that reason, the optimization algorithms are kept in each implementation class.
This interface allows <a href="Optimization.html" title="class in org.apache.sis.filter"><code>Optimization</code></a> to invoke that code.
<p>Implementations need to override only one of the 2 methods defined in this interface.</p></div>
</section>
<section class="summary">
<ul class="summary-list">
<!-- ========== METHOD SUMMARY =========== -->
<li>
<section class="method-summary" id="method-summary">
<h2>Method Summary</h2>
<div id="method-summary-table">
<div class="table-tabs" role="tablist" aria-orientation="horizontal"><button id="method-summary-table-tab0" role="tab" aria-selected="true" aria-controls="method-summary-table.tabpanel" tabindex="0" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table', 3)" class="active-table-tab">All Methods</button><button id="method-summary-table-tab2" role="tab" aria-selected="false" aria-controls="method-summary-table.tabpanel" tabindex="-1" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table-tab2', 3)" class="table-tab">Instance Methods</button><button id="method-summary-table-tab5" role="tab" aria-selected="false" aria-controls="method-summary-table.tabpanel" tabindex="-1" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table-tab5', 3)" class="table-tab">Default Methods</button></div>
<div id="method-summary-table.tabpanel" role="tabpanel">
<div class="summary-table three-column-summary" aria-labelledby="method-summary-table-tab0">
<div class="table-header col-first">Modifier and Type</div>
<div class="table-header col-second">Method</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab5"><code>default <a href="Expression.html" title="interface in org.apache.sis.filter">Expression</a><wbr>&lt;<a href="Optimization.OnExpression.html" title="type parameter in Optimization.OnExpression">R</a>,<wbr>? extends <a href="Optimization.OnExpression.html" title="type parameter in Optimization.OnExpression">V</a>&gt;</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab5"><code><a href="#optimize(org.apache.sis.filter.Optimization)" class="member-name-link">optimize</a><wbr>(<a href="Optimization.html" title="class in org.apache.sis.filter">Optimization</a>&nbsp;optimization)</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab5">
<div class="block">Tries to optimize this expression.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab5"><code>default <a href="Expression.html" title="interface in org.apache.sis.filter">Expression</a><wbr>&lt;<a href="Optimization.OnExpression.html" title="type parameter in Optimization.OnExpression">R</a>,<wbr><a href="Optimization.OnExpression.html" title="type parameter in Optimization.OnExpression">V</a>&gt;</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab5"><code><a href="#recreate(org.apache.sis.filter.Expression%5B%5D)" class="member-name-link">recreate</a><wbr>(<a href="Expression.html" title="interface in org.apache.sis.filter">Expression</a>&lt;<a href="Optimization.OnExpression.html" title="type parameter in Optimization.OnExpression">R</a>,<wbr>?&gt;[]&nbsp;effective)</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab5">
<div class="block">Creates a new expression of the same type than this expression, but with optimized parameters.</div>
</div>
</div>
</div>
</div>
<div class="inherited-list">
<h3 id="methods-inherited-from-class-Expression">Methods inherited from interface&nbsp;<a href="Expression.html" title="interface in org.apache.sis.filter">Expression</a></h3>
<code><a href="Expression.html#apply(R)">apply</a>, <a href="Expression.html#getFunctionName()">get­Function­Name</a>, <a href="Expression.html#getParameters()">get­Parameters</a>, <a href="Expression.html#getResourceClass()">get­Resource­Class</a>, <a href="Expression.html#toValueType(java.lang.Class)">to­Value­Type</a></code></div>
<div class="inherited-list">
<h3 id="methods-inherited-from-class-Function">Methods inherited from interface&nbsp;<a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/function/Function.html" title="class or interface in java.util.function" class="external-link">Function</a></h3>
<code><a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/function/Function.html#andThen(java.util.function.Function)" title="class or interface in java.util.function" class="external-link">and­Then</a>, <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/function/Function.html#compose(java.util.function.Function)" title="class or interface in java.util.function" class="external-link">compose</a></code></div>
</section>
</li>
</ul>
</section>
<section class="details">
<ul class="details-list">
<!-- ============ METHOD DETAIL ========== -->
<li>
<section class="method-details" id="method-detail">
<h2>Method Details</h2>
<ul class="member-list">
<li>
<section class="detail" id="optimize(org.apache.sis.filter.Optimization)">
<h3>optimize</h3>
<div class="member-signature"><span class="modifiers">default</span>&nbsp;<span class="return-type"><a href="Expression.html" title="interface in org.apache.sis.filter">Expression</a>&lt;<a href="Optimization.OnExpression.html" title="type parameter in Optimization.OnExpression">R</a>,<wbr>? extends <a href="Optimization.OnExpression.html" title="type parameter in Optimization.OnExpression">V</a>&gt;</span>&nbsp;<span class="element-name">optimize</span><wbr><span class="parameters">(<a href="Optimization.html" title="class in org.apache.sis.filter">Optimization</a>&nbsp;optimization)</span></div>
<div class="block">Tries to optimize this expression. The default implementation performs the following steps:
<ul>
<li>If all expressions are literals and this expression is not a
<a href="../../../../../org.apache.sis.util/org/apache/sis/math/FunctionProperty.html#VOLATILE">volatile function</a>, evaluate this expression immediately.</li>
<li>Otherwise if at least one parameter can be optimized,
<a href="#recreate(org.apache.sis.filter.Expression%5B%5D)">recreate</a> the expression.</li>
<li>Otherwise returns <code>this</code>.</li>
</ul></div>
<dl class="notes">
<dt>Parameters:</dt>
<dd><code>optimization</code> - the simplifications or optimizations to apply on this expression.</dd>
<dt>Returns:</dt>
<dd>the simplified or optimized expression, or <code>this</code> if no optimization has been applied.</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="recreate(org.apache.sis.filter.Expression[])">
<h3>recreate</h3>
<div class="member-signature"><span class="modifiers">default</span>&nbsp;<span class="return-type"><a href="Expression.html" title="interface in org.apache.sis.filter">Expression</a>&lt;<a href="Optimization.OnExpression.html" title="type parameter in Optimization.OnExpression">R</a>,<wbr><a href="Optimization.OnExpression.html" title="type parameter in Optimization.OnExpression">V</a>&gt;</span>&nbsp;<span class="element-name">recreate</span><wbr><span class="parameters">(<a href="Expression.html" title="interface in org.apache.sis.filter">Expression</a>&lt;<a href="Optimization.OnExpression.html" title="type parameter in Optimization.OnExpression">R</a>,<wbr>?&gt;[]&nbsp;effective)</span></div>
<div class="block">Creates a new expression of the same type than this expression, but with optimized parameters.
The expressions given to this method shall be equivalent to the expressions used by this instance,
potentially more efficient.
<p>This method is used by the default implementation of <a href="#optimize(org.apache.sis.filter.Optimization)"><code>optimize(Optimization)</code></a>
and can be ignored if above method is overridden.</p></div>
<dl class="notes">
<dt>Parameters:</dt>
<dd><code>effective</code> - the expressions to use as a replacement of this expression parameters.</dd>
<dt>Returns:</dt>
<dd>the new expression, or <code>this</code> if unsupported.</dd>
</dl>
</section>
</li>
</ul>
</section>
</li>
</ul>
</section>
<!-- ========= END OF CLASS DATA ========= -->
</main>
</div>
</div>
</body>
</html>