tame/core/extern.xml

82 lines
2.6 KiB
XML

<?xml version="1.0"?>
<!--
Copyright (C) 2014-2023 Ryan Specialty, LLC.
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 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="Extern Definition">
Externs are symbols that are expected to be defined by package importers
before linking.
Rather than explicitly declaring extern symbols,
these templates provide more human-readable abstractions.
Note that when defining extern classifications with
\ref{_classify-extern_},
if specifying a yield,
the dimensionality is~$1$ unless otherwise provided.
<template name="_classify-extern_"
desc="Define extern for classification">
<param name="@as@" desc="Extern classification name" />
<param name="@yields@" desc="Extern classification yield">
<text></text>
</param>
<!-- default assumption is a vector -->
<param name="@dim@" desc="Extern classification yield dimensions">
<text>1</text>
</param>
<extern name=":class:{@as@}" type="class" dim="@dim@"
yields="@yields@" />
<if name="@yields@">
<extern name="@yields@" type="cgen" dim="@dim@"
parent=":class:{@as@}" />
</if>
</template>
<template name="_rate-each-extern_"
desc="Define extern for rate-each">
<param name="@generates@" desc="Extern generator name" />
<param name="@yields@" desc="Extern yield name" />
<if name="@generates@">
<extern name="@generates@" type="gen" dtype="float" dim="1" />
</if>
<if name="@yields@">
<extern name="@yields@" type="rate" dtype="float" dim="0" />
</if>
</template>
<template name="_rate-extern_"
desc="Define extern for rate">
<param name="@yields@" desc="Extern yield name" />
<extern name="@yields@" type="rate" dtype="float" dim="0" />
</template>
</package>