tame/core/numeric/common.xml

132 lines
3.7 KiB
XML

<?xml version="1.0" encoding="ISO-8859-1"?>
<!--
Copyright (C) 2015 LoVullo Associates, Inc.
This file is part of tame-core.
tame-core is free software: you can redistribute it and/or modify it
under the terms of the GNU Lesser General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<package xmlns="http://www.lovullo.com/rater"
xmlns:c="http://www.lovullo.com/calc"
xmlns:t="http://www.lovullo.com/rater/apply-template"
core="true"
desc="General numeric opreations">
<import package="../base" />
<template name="_inc_" desc="Increment value [by 1]">
<param name="@values@" desc="Value to increment (nodes)" />
<param name="@value@" desc="Value to decrement by (default 1)">
<text>1</text>
</param>
<c:sum>
<param-copy name="@values@" />
<c:const value="@value@" type="integer" desc="Increment by 1" />
</c:sum>
</template>
<template name="_dec_" desc="Decrement value [by 1]">
<param name="@values@" desc="Value to decrement (nodes)" />
<param name="@value@" desc="Value to decrement by (default 1)">
<text>1</text>
</param>
<c:sum>
<param-copy name="@values@" />
<c:product>
<c:value-of name="NEGATE" />
<c:const value="@value@" type="integer" desc="Decrement by 1" />
</c:product>
</c:sum>
</template>
<template name="_negate_" desc="Negate a value">
<param name="@values@" desc="Value to decrement (nodes)" />
<param name="@label@" desc="Application label">
<!-- default empty -->
<text></text>
</param>
<c:product label="@label@">
<c:value-of name="NEGATE" />
<param-copy name="@values@" />
</c:product>
</template>
<template name="_percent-of_" desc="Take percentage of a value">
<param name="@value@" desc="Value to take percentage of" />
<param name="@index@" desc="Index" />
<param name="@percent@" desc="Percent (as a whole number)" />
<param name="@desc@" desc="Optional description">
<text>Percent to reduce</text>
</param>
<c:product>
<c:value-of name="@value@" index="@index@" />
<t:ptor value="@percent@" desc="@desc@" />
</c:product>
</template>
<!--
Calculates a value based on the given multiplier if the given value falls
within the given range
-->
<function name="rangeadd" desc="Add a value multiplier for a given range">
<param name="low" type="float" desc="Lower bound, inclusive" />
<param name="high" type="float" desc="Upper bound, inclusive" />
<param name="val" type="float" desc="Value to compare" />
<param name="mult" type="float" desc="Range multiplier" />
<c:product>
<c:when name="val">
<c:gte>
<c:value-of name="low" />
</c:gte>
</c:when>
<c:when name="val">
<c:lte>
<c:value-of name="high" />
</c:lte>
</c:when>
<!-- atop of the 0.00003 we've already provided = 0.000035 -->
<c:value-of name="mult" />
<c:sum>
<c:value-of name="val" />
<!-- subtract -->
<c:product>
<c:value-of name="NEGATE" />
<c:value-of name="low" />
</c:product>
</c:sum>
</c:product>
</function>
</package>