blob: 1d273c582e85de876da895aa79a405ff4819a2e6 [file] [log] [blame]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta content="index,follow" name="robots" />
<meta content="libmpdec documentation" name="description" />
<title>Assignment, Conversions, I/O &mdash; mpdecimal 2.4.0 documentation</title>
<link rel="stylesheet" href="_static/mpdecimal-doc.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: './',
VERSION: '2.4.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: false
};
</script>
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<link rel="top" title="mpdecimal 2.4.0 documentation" href="index.html" />
<link rel="next" title="Attributes of a Decimal" href="attributes.html" />
<link rel="prev" title="Decimals" href="decimals.html" />
</head>
<body>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="attributes.html" title="Attributes of a Decimal"
accesskey="N">next</a></li>
<li class="right" >
<a href="decimals.html" title="Decimals"
accesskey="P">previous</a> |</li>
<li><a href="http://www.bytereef.org/mpdecimal/index.html">project home</a></li>
</ul>
</div>
<div class="sphinxsidebar">
<div class="sphinxsidebarwrapper">
<h3><a href="index.html">Table Of Contents</a></h3>
<ul>
<li><a class="reference internal" href="#">Assignment, Conversions, I/O</a><ul>
<li><a class="reference internal" href="#create-decimal">Create Decimal</a><ul>
<li><a class="reference internal" href="#from-string">From String</a></li>
<li><a class="reference internal" href="#from-integer">From Integer</a></li>
<li><a class="reference internal" href="#from-special-values">From Special Values</a></li>
</ul>
</li>
<li><a class="reference internal" href="#create-static-decimal">Create Static Decimal</a><ul>
<li><a class="reference internal" href="#std:topic-mpd_sset_u64">From Integer</a></li>
</ul>
</li>
<li><a class="reference internal" href="#convert-decimal">Convert Decimal</a><ul>
<li><a class="reference internal" href="#to-string">To String</a></li>
<li><a class="reference internal" href="#to-integer">To Integer</a></li>
</ul>
</li>
<li><a class="reference internal" href="#copy-decimal">Copy Decimal</a></li>
<li><a class="reference internal" href="#print-decimal">Print Decimal</a></li>
<li><a class="reference internal" href="#print-status-flags">Print Status Flags</a></li>
</ul>
</li>
</ul>
<h4>Previous topic</h4>
<p class="topless"><a href="decimals.html"
title="previous chapter">Decimals</a></p>
<h4>Next topic</h4>
<p class="topless"><a href="attributes.html"
title="next chapter">Attributes of a Decimal</a></p>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="search.html" method="get">
<input type="text" name="q" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body">
<div class="section" id="assignment-conversions-i-o">
<h1>Assignment, Conversions, I/O</h1>
<div class="section" id="create-decimal">
<h2>Create Decimal</h2>
<span class="target" id="std:topic-mpd_qset_string"></span><div class="section" id="from-string">
<span id="std:topic-mpd_set_string"></span><h3>From String</h3>
<div class="highlight-c"><div class="highlight"><pre><span class="kt">void</span> <span class="nf">mpd_qset_string</span><span class="p">(</span><span class="kt">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">s</span><span class="p">,</span> <span class="k">const</span> <span class="kt">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">,</span>
<span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span>
<span class="kt">void</span> <span class="nf">mpd_set_string</span><span class="p">(</span><span class="kt">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">s</span><span class="p">,</span> <span class="kt">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span>
</pre></div>
</div>
<p>Set <em>result</em> from <em>s</em>. The context is respected. This means that rounding, overflow
etc. can take place. If the string is not valid, the <tt class="xref c c-macro docutils literal"><span class="pre">MPD_Conversion_syntax</span></tt>
condition is added to <em>status</em> and <em>result</em> is set to NaN.</p>
<span class="target" id="std:topic-mpd_qset_ssize"></span><span class="target" id="std:topic-mpd_qset_i32"></span><span class="target" id="std:topic-mpd_qset_i64"></span><span class="target" id="std:topic-mpd_qset_uint"></span><span class="target" id="std:topic-mpd_qset_u32"></span><span class="target" id="std:topic-mpd_qset_u64"></span><span class="target" id="std:topic-mpd_set_ssize"></span><span class="target" id="std:topic-mpd_set_i32"></span><span class="target" id="std:topic-mpd_set_i64"></span><span class="target" id="std:topic-mpd_set_uint"></span><span class="target" id="std:topic-mpd_set_u32"></span></div>
<div class="section" id="from-integer">
<span id="std:topic-mpd_set_u64"></span><h3>From Integer</h3>
<div class="highlight-c"><div class="highlight"><pre><span class="kt">void</span> <span class="nf">mpd_qset_ssize</span><span class="p">(</span><span class="kt">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="kt">mpd_ssize_t</span> <span class="n">a</span><span class="p">,</span> <span class="k">const</span> <span class="kt">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">,</span>
<span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span>
<span class="kt">void</span> <span class="nf">mpd_qset_i32</span><span class="p">(</span><span class="kt">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="kt">int32_t</span> <span class="n">a</span><span class="p">,</span> <span class="k">const</span> <span class="kt">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">,</span>
<span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span>
<span class="kt">void</span> <span class="nf">mpd_qset_i64</span><span class="p">(</span><span class="kt">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="kt">int64_t</span> <span class="n">a</span><span class="p">,</span> <span class="k">const</span> <span class="kt">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">,</span>
<span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span>
<span class="kt">void</span> <span class="nf">mpd_qset_uint</span><span class="p">(</span><span class="kt">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="kt">mpd_uint_t</span> <span class="n">a</span><span class="p">,</span> <span class="k">const</span> <span class="kt">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">,</span>
<span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span>
<span class="kt">void</span> <span class="nf">mpd_qset_u32</span><span class="p">(</span><span class="kt">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">a</span><span class="p">,</span> <span class="k">const</span> <span class="kt">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">,</span>
<span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span>
<span class="kt">void</span> <span class="nf">mpd_qset_u64</span><span class="p">(</span><span class="kt">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="kt">uint64_t</span> <span class="n">a</span><span class="p">,</span> <span class="k">const</span> <span class="kt">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">,</span>
<span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span>
<span class="kt">void</span> <span class="nf">mpd_set_ssize</span><span class="p">(</span><span class="kt">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="kt">mpd_ssize_t</span> <span class="n">a</span><span class="p">,</span> <span class="kt">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span>
<span class="kt">void</span> <span class="nf">mpd_set_i32</span><span class="p">(</span><span class="kt">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="kt">int32_t</span> <span class="n">a</span><span class="p">,</span> <span class="kt">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span>
<span class="kt">void</span> <span class="nf">mpd_set_i64</span><span class="p">(</span><span class="kt">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="kt">int64_t</span> <span class="n">a</span><span class="p">,</span> <span class="kt">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span>
<span class="kt">void</span> <span class="nf">mpd_set_uint</span><span class="p">(</span><span class="kt">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="kt">mpd_uint_t</span> <span class="n">a</span><span class="p">,</span> <span class="kt">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span>
<span class="kt">void</span> <span class="nf">mpd_set_u32</span><span class="p">(</span><span class="kt">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">a</span><span class="p">,</span> <span class="kt">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span>
<span class="kt">void</span> <span class="nf">mpd_set_u64</span><span class="p">(</span><span class="kt">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="kt">uint64_t</span> <span class="n">a</span><span class="p">,</span> <span class="kt">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span>
</pre></div>
</div>
<p>Set <em>result</em> from a C integer type. The context is respected.</p>
</div>
<div class="section" id="from-special-values">
<span id="std:topic-mpd_seterror"></span><h3>From Special Values</h3>
<div class="highlight-c"><div class="highlight"><pre><span class="kt">void</span> <span class="nf">mpd_seterror</span><span class="p">(</span><span class="kt">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">flags</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span>
</pre></div>
</div>
<p>Set <em>result</em> to NaN, with the error condition passed in <em>flags</em>. The error
condition is added to <em>status</em>. This is a convenience function intended to
be used inside quiet functions.</p>
<div class="highlight-c" id="std:topic-mpd_setspecial"><div class="highlight"><pre><span class="kt">void</span> <span class="nf">mpd_setspecial</span><span class="p">(</span><span class="kt">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="kt">uint8_t</span> <span class="n">sign</span><span class="p">,</span> <span class="kt">uint8_t</span> <span class="n">type</span><span class="p">);</span>
</pre></div>
</div>
<p>Set <em>result</em> to a special number. <em>sign</em> must be one of {<tt class="xref c c-macro docutils literal"><span class="pre">MPD_POS</span></tt>, <tt class="xref c c-macro docutils literal"><span class="pre">MPD_NEG</span></tt>},
<em>type</em> one of {<tt class="xref c c-macro docutils literal"><span class="pre">MPD_INF</span></tt>, <tt class="xref c c-macro docutils literal"><span class="pre">MPD_NAN</span></tt>, <tt class="xref c c-macro docutils literal"><span class="pre">MPD_SNAN</span></tt>}.</p>
<div class="highlight-c" id="std:topic-mpd_zerocoeff"><div class="highlight"><pre><span class="kt">void</span> <span class="nf">mpd_zerocoeff</span><span class="p">(</span><span class="kt">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">);</span>
</pre></div>
</div>
<p>Set the coefficient of <em>result</em> to zero. This function cannot fail.</p>
<span class="target" id="std:topic-mpd_qmaxcoeff"></span><div class="highlight-c" id="std:topic-mpd_maxcoeff"><div class="highlight"><pre><span class="kt">void</span> <span class="nf">mpd_qmaxcoeff</span><span class="p">(</span><span class="kt">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="kt">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">,</span>
<span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span>
<span class="kt">void</span> <span class="nf">mpd_maxcoeff</span><span class="p">(</span><span class="kt">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="kt">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span>
</pre></div>
</div>
<p>Set the coefficient of <em>result</em> to the maximum value allowed by <em>ctx-&gt;prec</em>.
The function can fail with <tt class="xref c c-macro docutils literal"><span class="pre">MPD_Malloc_error</span></tt>.</p>
</div>
</div>
<div class="section" id="create-static-decimal">
<h2>Create Static Decimal</h2>
<span class="target" id="std:topic-mpd_qsset_ssize"></span><span class="target" id="std:topic-mpd_qsset_i32"></span><span class="target" id="std:topic-mpd_qsset_i64"></span><span class="target" id="std:topic-mpd_qsset_uint"></span><span class="target" id="std:topic-mpd_qsset_u32"></span><span class="target" id="std:topic-mpd_qsset_u64"></span><span class="target" id="std:topic-mpd_sset_ssize"></span><span class="target" id="std:topic-mpd_sset_i32"></span><span class="target" id="std:topic-mpd_sset_i64"></span><span class="target" id="std:topic-mpd_sset_uint"></span><span class="target" id="std:topic-mpd_sset_u32"></span><div class="section" id="std:topic-mpd_sset_u64">
<span id="id1"></span><h3>From Integer</h3>
<div class="highlight-c"><div class="highlight"><pre><span class="kt">void</span> <span class="nf">mpd_qsset_ssize</span><span class="p">(</span><span class="kt">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="kt">mpd_ssize_t</span> <span class="n">a</span><span class="p">,</span> <span class="k">const</span> <span class="kt">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">,</span>
<span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span>
<span class="kt">void</span> <span class="nf">mpd_qsset_i32</span><span class="p">(</span><span class="kt">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="kt">int32_t</span> <span class="n">a</span><span class="p">,</span> <span class="k">const</span> <span class="kt">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">,</span>
<span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span>
<span class="kt">void</span> <span class="nf">mpd_qsset_uint</span><span class="p">(</span><span class="kt">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="kt">mpd_uint_t</span> <span class="n">a</span><span class="p">,</span> <span class="k">const</span> <span class="kt">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">,</span>
<span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span>
<span class="kt">void</span> <span class="nf">mpd_qsset_u32</span><span class="p">(</span><span class="kt">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">a</span><span class="p">,</span> <span class="k">const</span> <span class="kt">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">,</span>
<span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span>
<span class="kt">void</span> <span class="nf">mpd_sset_ssize</span><span class="p">(</span><span class="kt">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="kt">mpd_ssize_t</span> <span class="n">a</span><span class="p">,</span> <span class="kt">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span>
<span class="kt">void</span> <span class="nf">mpd_sset_i32</span><span class="p">(</span><span class="kt">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="kt">int32_t</span> <span class="n">a</span><span class="p">,</span> <span class="kt">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span>
<span class="kt">void</span> <span class="nf">mpd_sset_uint</span><span class="p">(</span><span class="kt">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="kt">mpd_uint_t</span> <span class="n">a</span><span class="p">,</span> <span class="kt">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span>
<span class="kt">void</span> <span class="nf">mpd_sset_u32</span><span class="p">(</span><span class="kt">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">a</span><span class="p">,</span> <span class="kt">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span>
<span class="cm">/* 64-bit build only */</span>
<span class="kt">void</span> <span class="nf">mpd_qsset_i64</span><span class="p">(</span><span class="kt">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="kt">int64_t</span> <span class="n">a</span><span class="p">,</span> <span class="k">const</span> <span class="kt">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">,</span>
<span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span>
<span class="kt">void</span> <span class="nf">mpd_qsset_u64</span><span class="p">(</span><span class="kt">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="kt">uint64_t</span> <span class="n">a</span><span class="p">,</span> <span class="k">const</span> <span class="kt">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">,</span>
<span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span>
<span class="kt">void</span> <span class="nf">mpd_sset_i64</span><span class="p">(</span><span class="kt">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="kt">int64_t</span> <span class="n">a</span><span class="p">,</span> <span class="kt">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span>
<span class="kt">void</span> <span class="nf">mpd_sset_u64</span><span class="p">(</span><span class="kt">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="kt">uint64_t</span> <span class="n">a</span><span class="p">,</span> <span class="kt">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span>
</pre></div>
</div>
<p>Set <em>result</em> from a C integer type. The context is respected. <em>result</em> must be a
static decimal, see section <a class="reference internal" href="memory.html#advanced-memory-handling"><em>Advanced Memory Handling</em></a>.</p>
</div>
</div>
<div class="section" id="convert-decimal">
<h2>Convert Decimal</h2>
<span class="target" id="std:topic-mpd_to_sci"></span><span class="target" id="std:topic-mpd_to_eng"></span><span class="target" id="std:topic-mpd_to_sci_size"></span><div class="section" id="to-string">
<span id="std:topic-mpd_to_eng_size"></span><h3>To String</h3>
<div class="highlight-c"><div class="highlight"><pre><span class="kt">char</span> <span class="o">*</span><span class="nf">mpd_to_sci</span><span class="p">(</span><span class="k">const</span> <span class="kt">mpd_t</span> <span class="o">*</span><span class="n">dec</span><span class="p">,</span> <span class="kt">int</span> <span class="n">fmt</span><span class="p">);</span>
<span class="kt">char</span> <span class="o">*</span><span class="nf">mpd_to_eng</span><span class="p">(</span><span class="k">const</span> <span class="kt">mpd_t</span> <span class="o">*</span><span class="n">dec</span><span class="p">,</span> <span class="kt">int</span> <span class="n">fmt</span><span class="p">);</span>
<span class="kt">mpd_ssize_t</span> <span class="nf">mpd_to_sci_size</span><span class="p">(</span><span class="kt">char</span> <span class="o">**</span><span class="n">res</span><span class="p">,</span> <span class="k">const</span> <span class="kt">mpd_t</span> <span class="o">*</span><span class="n">dec</span><span class="p">,</span> <span class="kt">int</span> <span class="n">fmt</span><span class="p">);</span>
<span class="kt">mpd_ssize_t</span> <span class="nf">mpd_to_eng_size</span><span class="p">(</span><span class="kt">char</span> <span class="o">**</span><span class="n">res</span><span class="p">,</span> <span class="k">const</span> <span class="kt">mpd_t</span> <span class="o">*</span><span class="n">dec</span><span class="p">,</span> <span class="kt">int</span> <span class="n">fmt</span><span class="p">);</span>
</pre></div>
</div>
<p>Return the <em>scientific</em> or <em>engineering</em> string representation of a decimal.
This operation is not context sensitive. If <em>fmt</em> is zero, the exponent
character is lower case, otherwise it is upper case. If allocating memory
for the string fails, <tt class="xref c c-macro docutils literal"><span class="pre">NULL</span></tt> is returned.</p>
<div class="versionadded">
<p><span class="versionmodified">New in version 2.4: </span><tt class="xref c c-func docutils literal"><span class="pre">mpd_to_sci_size</span></tt> and <tt class="xref c c-func docutils literal"><span class="pre">mpd_to_eng_size</span></tt> additionally return the
size of the result string, without counting the terminating NUL.
The goal is to avoid an unnecessary call to <tt class="xref c c-func docutils literal"><span class="pre">strlen</span></tt>.</p>
</div>
<span class="target" id="std:topic-mpd_qformat"></span><div class="highlight-c" id="std:topic-mpd_format"><div class="highlight"><pre><span class="kt">char</span> <span class="o">*</span><span class="nf">mpd_qformat</span><span class="p">(</span><span class="k">const</span> <span class="kt">mpd_t</span> <span class="o">*</span><span class="n">dec</span><span class="p">,</span> <span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">fmt</span><span class="p">,</span>
<span class="k">const</span> <span class="kt">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span>
<span class="kt">char</span> <span class="o">*</span><span class="nf">mpd_format</span><span class="p">(</span><span class="k">const</span> <span class="kt">mpd_t</span> <span class="o">*</span><span class="n">dec</span><span class="p">,</span> <span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">fmt</span><span class="p">,</span>
<span class="kt">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span>
</pre></div>
</div>
<p>Return the string representation of a decimal according to format string <em>fmt</em>.
The format string syntax is the same as in Python PEP 3101 (See Standard Format
Specifiers) and is quite similar to the syntax used for floating point numbers
the C <tt class="xref c c-func docutils literal"><span class="pre">fprintf</span></tt> function. The fill character may be a UTF-8 character,
the rest of the format string must be ASCII.</p>
<p>The function can fail with <tt class="xref c c-macro docutils literal"><span class="pre">MPD_Invalid_operation</span></tt> for an invalid format
string or <tt class="xref c c-macro docutils literal"><span class="pre">MPD_Malloc_error</span></tt>. In both cases, the return value is
<tt class="xref c c-macro docutils literal"><span class="pre">NULL</span></tt>.</p>
<span class="target" id="std:topic-mpd_qget_ssize"></span><span class="target" id="std:topic-mpd_qget_uint"></span><span class="target" id="std:topic-mpd_get_ssize"></span><span class="target" id="std:topic-mpd_get_uint"></span><span class="target" id="std:topic-mpd_qget_i32"></span><span class="target" id="std:topic-mpd_qget_u32"></span><span class="target" id="std:topic-mpd_get_i32"></span><span class="target" id="std:topic-mpd_get_u32"></span><span class="target" id="std:topic-mpd_qget_u64"></span><span class="target" id="std:topic-mpd_qget_i64"></span><span class="target" id="std:topic-mpd_get_i64"></span></div>
<div class="section" id="to-integer">
<span id="std:topic-mpd_get_u64"></span><h3>To Integer</h3>
<div class="highlight-c"><div class="highlight"><pre><span class="kt">mpd_ssize_t</span> <span class="nf">mpd_qget_ssize</span><span class="p">(</span><span class="k">const</span> <span class="kt">mpd_t</span> <span class="o">*</span><span class="n">dec</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span>
<span class="kt">mpd_uint_t</span> <span class="nf">mpd_qget_uint</span><span class="p">(</span><span class="k">const</span> <span class="kt">mpd_t</span> <span class="o">*</span><span class="n">dec</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span>
<span class="kt">mpd_ssize_t</span> <span class="nf">mpd_get_ssize</span><span class="p">(</span><span class="k">const</span> <span class="kt">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="kt">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span>
<span class="kt">mpd_uint_t</span> <span class="nf">mpd_get_uint</span><span class="p">(</span><span class="k">const</span> <span class="kt">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="kt">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span>
<span class="kt">int32_t</span> <span class="nf">mpd_qget_i32</span><span class="p">(</span><span class="k">const</span> <span class="kt">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span>
<span class="kt">uint32_t</span> <span class="nf">mpd_qget_u32</span><span class="p">(</span><span class="k">const</span> <span class="kt">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span>
<span class="kt">int32_t</span> <span class="nf">mpd_get_i32</span><span class="p">(</span><span class="k">const</span> <span class="kt">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="kt">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span>
<span class="kt">uint32_t</span> <span class="nf">mpd_get_u32</span><span class="p">(</span><span class="k">const</span> <span class="kt">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="kt">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span>
<span class="kt">uint64_t</span> <span class="nf">mpd_qget_u64</span><span class="p">(</span><span class="k">const</span> <span class="kt">mpd_t</span> <span class="o">*</span><span class="n">dec</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span>
<span class="kt">int64_t</span> <span class="nf">mpd_qget_i64</span><span class="p">(</span><span class="k">const</span> <span class="kt">mpd_t</span> <span class="o">*</span><span class="n">dec</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span>
<span class="kt">int64_t</span> <span class="nf">mpd_get_i64</span><span class="p">(</span><span class="k">const</span> <span class="kt">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="kt">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span>
<span class="kt">uint64_t</span> <span class="nf">mpd_get_u64</span><span class="p">(</span><span class="k">const</span> <span class="kt">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="kt">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span>
</pre></div>
</div>
<p>Convert a decimal to a C integer type. If the decimal is not an integer or
its value is outside the range of the C type, <tt class="xref c c-macro docutils literal"><span class="pre">MPD_SSIZE_MAX</span></tt> is
returned for signed types and <tt class="xref c c-macro docutils literal"><span class="pre">MPD_UINT_MAX</span></tt> for unsigned types. In
this case, the status is set to <tt class="xref c c-macro docutils literal"><span class="pre">MPD_Invalid_operation</span></tt>. Since a
decimal can have the values <tt class="xref c c-macro docutils literal"><span class="pre">MPD_SSIZE_MAX</span></tt> or <tt class="xref c c-macro docutils literal"><span class="pre">MPD_UINT_MAX</span></tt>,
the only reliable way to check for errors is to check the status.</p>
<span class="target" id="std:topic-mpd_qabs_uint"></span><div class="highlight-c" id="std:topic-mpd_abs_uint"><div class="highlight"><pre><span class="kt">mpd_uint_t</span> <span class="nf">mpd_qabs_uint</span><span class="p">(</span><span class="k">const</span> <span class="kt">mpd_t</span> <span class="o">*</span><span class="n">dec</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span>
<span class="kt">mpd_uint_t</span> <span class="nf">mpd_abs_uint</span><span class="p">(</span><span class="k">const</span> <span class="kt">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="kt">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span>
</pre></div>
</div>
<p>Return the absolute of numbers in the range [<tt class="xref c c-macro docutils literal"><span class="pre">-MPD_UINT_MAX</span></tt>, <tt class="xref c c-macro docutils literal"><span class="pre">MPD_UINT_MAX</span></tt>].
Error handling as above.</p>
<div class="versionadded">
<p><span class="versionmodified">New in version 2.4: </span>All functions are available in both the 64-bit and the 32-bit builds.</p>
</div>
</div>
</div>
<div class="section" id="copy-decimal">
<h2>Copy Decimal</h2>
<span class="target" id="std:topic-mpd_qcopy"></span><div class="highlight-c" id="std:topic-mpd_copy"><div class="highlight"><pre><span class="kt">int</span> <span class="nf">mpd_qcopy</span><span class="p">(</span><span class="kt">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="kt">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span>
<span class="kt">void</span> <span class="nf">mpd_copy</span><span class="p">(</span><span class="kt">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="kt">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="kt">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span>
</pre></div>
</div>
<p>Set <em>result</em> to the value of <em>a</em> and return 1 for success. On failure,
return 0 and add <tt class="xref c c-macro docutils literal"><span class="pre">MPD_Malloc_Error</span></tt> to <em>status</em>.</p>
<div class="highlight-c" id="std:topic-mpd_qncopy"><div class="highlight"><pre><span class="kt">mpd_t</span> <span class="o">*</span><span class="nf">mpd_qncopy</span><span class="p">(</span><span class="k">const</span> <span class="kt">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">);</span>
</pre></div>
</div>
<p>Return a pointer to a fresh copy of <em>a</em>, <tt class="xref c c-macro docutils literal"><span class="pre">NULL</span></tt> on failure.</p>
<span class="target" id="std:topic-mpd_qcopy_abs"></span><div class="highlight-c" id="std:topic-mpd_copy_abs"><div class="highlight"><pre><span class="kt">int</span> <span class="nf">mpd_qcopy_abs</span><span class="p">(</span><span class="kt">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="kt">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span>
<span class="kt">void</span> <span class="nf">mpd_copy_abs</span><span class="p">(</span><span class="kt">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="kt">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="kt">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span>
</pre></div>
</div>
<p>Set <em>result</em> to the value of <em>a</em> with the sign set to 0. If successful,
return 1. Otherwise, return 0 and add <tt class="xref c c-macro docutils literal"><span class="pre">MPD_Malloc_Error</span></tt> to <em>status</em>.</p>
<span class="target" id="std:topic-mpd_qcopy_negate"></span><div class="highlight-c" id="std:topic-mpd_copy_negate"><div class="highlight"><pre><span class="kt">int</span> <span class="nf">mpd_qcopy_negate</span><span class="p">(</span><span class="kt">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="kt">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span>
<span class="kt">void</span> <span class="nf">mpd_copy_negate</span><span class="p">(</span><span class="kt">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="kt">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="kt">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span>
</pre></div>
</div>
<p>Set <em>result</em> to the value of <em>a</em> with the sign inverted. If successful,
return 1. Otherwise, return 0 and add <tt class="xref c c-macro docutils literal"><span class="pre">MPD_Malloc_Error</span></tt> to <em>status</em>.</p>
<span class="target" id="std:topic-mpd_qcopy_sign"></span><div class="highlight-c" id="std:topic-mpd_copy_sign"><div class="highlight"><pre><span class="kt">int</span> <span class="nf">mpd_qcopy_sign</span><span class="p">(</span><span class="kt">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="kt">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="k">const</span> <span class="kt">mpd_t</span> <span class="o">*</span><span class="n">b</span><span class="p">,</span>
<span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span>
<span class="kt">void</span> <span class="nf">mpd_copy_sign</span><span class="p">(</span><span class="kt">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="kt">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="k">const</span> <span class="kt">mpd_t</span> <span class="o">*</span><span class="n">b</span><span class="p">,</span>
<span class="kt">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span>
</pre></div>
</div>
<p>Set <em>result</em> to the value of <em>a</em>, using the sign of <em>b</em>. If successful,
return 1. Otherwise, return 0 and add <tt class="xref c c-macro docutils literal"><span class="pre">MPD_Malloc_Error</span></tt> to <em>status</em>.</p>
</div>
<div class="section" id="print-decimal">
<h2>Print Decimal</h2>
<span class="target" id="std:topic-mpd_fprint"></span><div class="highlight-c" id="std:topic-mpd_print"><div class="highlight"><pre><span class="kt">void</span> <span class="nf">mpd_fprint</span><span class="p">(</span><span class="kt">FILE</span> <span class="o">*</span><span class="n">file</span><span class="p">,</span> <span class="k">const</span> <span class="kt">mpd_t</span> <span class="o">*</span><span class="n">dec</span><span class="p">);</span>
<span class="kt">void</span> <span class="nf">mpd_print</span><span class="p">(</span><span class="k">const</span> <span class="kt">mpd_t</span> <span class="o">*</span><span class="n">dec</span><span class="p">);</span>
</pre></div>
</div>
<p>Print a decimal with a trailing newline to <em>FILE</em> or to <em>stdout</em>. These
functions are mostly useful for debugging.</p>
</div>
<div class="section" id="print-status-flags">
<h2>Print Status Flags</h2>
<span class="target" id="std:topic-mpd_snprint_flags"></span><span class="target" id="std:topic-mpd_lsnprint_flags"></span><div class="highlight-c" id="std:topic-mpd_lsnprint_signals"><div class="highlight"><pre><span class="kt">int</span> <span class="nf">mpd_snprint_flags</span><span class="p">(</span><span class="kt">char</span> <span class="o">*</span><span class="n">dest</span><span class="p">,</span> <span class="kt">int</span> <span class="n">nmemb</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">flags</span><span class="p">);</span>
<span class="kt">int</span> <span class="nf">mpd_lsnprint_flags</span><span class="p">(</span><span class="kt">char</span> <span class="o">*</span><span class="n">dest</span><span class="p">,</span> <span class="kt">int</span> <span class="n">nmemb</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">flags</span><span class="p">,</span>
<span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">flag_string</span><span class="p">[]);</span>
<span class="kt">int</span> <span class="nf">mpd_lsnprint_signals</span><span class="p">(</span><span class="kt">char</span> <span class="o">*</span><span class="n">dest</span><span class="p">,</span> <span class="kt">int</span> <span class="n">nmemb</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">flags</span><span class="p">,</span>
<span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">signal_string</span><span class="p">[]);</span>
</pre></div>
</div>
<p><tt class="xref c c-func docutils literal"><span class="pre">mpd_snprint_flags</span></tt> prints the conditions contained in <em>flags</em>
- separated by spaces - to the buffer <em>dest</em> with size <em>nmemb</em>. <em>nmemb</em>
must be at least <tt class="xref c c-macro docutils literal"><span class="pre">MPD_MAX_FLAG_STRING</span></tt>.</p>
<p><tt class="xref c c-func docutils literal"><span class="pre">mpd_lsnprint_flags</span></tt> prints the conditions contained in <em>flags</em> as
a comma separated list to the buffer <em>dest</em> with size <em>nmemb</em>. <em>nmemb</em>
must be at least <tt class="xref c c-macro docutils literal"><span class="pre">MPD_MAX_FLAG_LIST</span></tt>.</p>
<p><tt class="xref c c-func docutils literal"><span class="pre">mpd_lsnprint_signals</span></tt> prints signals contained in <em>flags</em> as
a comma separated list to the buffer <em>dest</em> with size <em>nmemb</em>. <em>nmemb</em>
must be at least <tt class="xref c c-macro docutils literal"><span class="pre">MPD_MAX_SIGNAL_LIST</span></tt>.</p>
<p>The result string is always <tt class="xref c c-macro docutils literal"><span class="pre">NUL</span></tt> terminated. The return value of
both functions is the number of characters printed, without the <tt class="xref c c-macro docutils literal"><span class="pre">NUL</span></tt>
terminator. On failure, -1 is returned.</p>
</div>
</div>
</div>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="attributes.html" title="Attributes of a Decimal"
>next</a></li>
<li class="right" >
<a href="decimals.html" title="Decimals"
>previous</a> |</li>
<li><a href="http://www.bytereef.org/mpdecimal/index.html">project home</a></li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2010-2016, Stefan Krah.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.
</div>
</body>
</html>