blob: 50b25caabc286345872eac7578d3c3e5a84bbdf2 [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/xhtml;charset=UTF-8"/>
<title>Skia: include/core/SkMath.h File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<!-- Generated by Doxygen 1.6.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="main.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div class="tabs">
<ul>
<li><a href="files.html"><span>File&nbsp;List</span></a></li>
<li><a href="globals.html"><span>File&nbsp;Members</span></a></li>
</ul>
</div>
</div>
<div class="contents">
<h1>include/core/SkMath.h File Reference</h1><code>#include &quot;<a class="el" href="_sk_types_8h_source.html">SkTypes.h</a>&quot;</code><br/>
<div class="dynheader">
Include dependency graph for SkMath.h:</div>
<div class="dynsection">
</div>
<div class="dynheader">
This graph shows which files directly or indirectly include this file:</div>
<div class="dynsection">
</div>
<p><a href="_sk_math_8h_source.html">Go to the source code of this file.</a></p>
<table border="0" cellpadding="0" cellspacing="0">
<tr><td colspan="2"><h2>Defines</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="_sk_math_8h.html#afab08772cf54af5b56983cba9fa509c3">SkSqrt32</a>(n)&nbsp;&nbsp;&nbsp;SkSqrtBits(n, 15)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="_sk_math_8h.html#abf04f1dc3004c0ed8b5fa535e81da59d">SkExtractSign</a>(n)&nbsp;&nbsp;&nbsp;((int32_t)(n) &gt;&gt; 31)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="_sk_math_8h.html#a238d25f0a1156c6f2c652e9b7ab78277">SkCLZ</a>(x)&nbsp;&nbsp;&nbsp;SkCLZ_portable(x)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="_sk_math_8h.html#ac995b5abe886001a2be1b63bb652f0c9">SkMulS16</a>(x, y)&nbsp;&nbsp;&nbsp;((x) * (y))</td></tr>
<tr><td colspan="2"><h2>Functions</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="_sk_math_8h.html#a84fb2d86b39452eef0b8a614b8bd7578">SkCLZ_portable</a> (uint32_t)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the number of leading zero bits (0...32). <a href="#a84fb2d86b39452eef0b8a614b8bd7578"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int32_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="_sk_math_8h.html#ad1c82f373d385a5821da3a186d93c5ce">SkMulShift</a> (int32_t a, int32_t b, unsigned shift)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int32_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="_sk_math_8h.html#ae43bef67fd5c320215fe2cfdb6ab35ca">SkMulDiv</a> (int32_t numer1, int32_t numer2, int32_t denom)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int32_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="_sk_math_8h.html#a1d093e44b78bf74cdbbc42cc60fad438">SkDivBits</a> (int32_t numer, int32_t denom, int shift)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int32_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="_sk_math_8h.html#ab6325ae5ffed98c2af87ef1b37a3411d">SkSqrtBits</a> (int32_t value, int bitBias)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int32_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="_sk_math_8h.html#afae7d95657f0e3f7ed82e814548ad481">SkCubeRootBits</a> (int32_t value, int bitBias)</td></tr>
</table>
<hr/><h2>Define Documentation</h2>
<a class="anchor" id="a238d25f0a1156c6f2c652e9b7ab78277"></a><!-- doxytag: member="SkMath.h::SkCLZ" ref="a238d25f0a1156c6f2c652e9b7ab78277" args="(x)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define SkCLZ</td>
<td>(</td>
<td class="paramtype">x&nbsp;</td>
<td class="paramname"></td>
<td>&nbsp;)&nbsp;</td>
<td>&nbsp;&nbsp;&nbsp;SkCLZ_portable(x)</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Definition at line <a class="el" href="_sk_math_8h_source.html#l00132">132</a> of file <a class="el" href="_sk_math_8h_source.html">SkMath.h</a>.</p>
</div>
</div>
<a class="anchor" id="abf04f1dc3004c0ed8b5fa535e81da59d"></a><!-- doxytag: member="SkMath.h::SkExtractSign" ref="abf04f1dc3004c0ed8b5fa535e81da59d" args="(n)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define SkExtractSign</td>
<td>(</td>
<td class="paramtype">n&nbsp;</td>
<td class="paramname"></td>
<td>&nbsp;)&nbsp;</td>
<td>&nbsp;&nbsp;&nbsp;((int32_t)(n) &gt;&gt; 31)</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Returns -1 if n &lt; 0, else returns 0 </p>
<p>Definition at line <a class="el" href="_sk_math_8h_source.html#l00057">57</a> of file <a class="el" href="_sk_math_8h_source.html">SkMath.h</a>.</p>
</div>
</div>
<a class="anchor" id="ac995b5abe886001a2be1b63bb652f0c9"></a><!-- doxytag: member="SkMath.h::SkMulS16" ref="ac995b5abe886001a2be1b63bb652f0c9" args="(x, y)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define SkMulS16</td>
<td>(</td>
<td class="paramtype">x, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">y&nbsp;</td>
<td class="paramname"></td>
<td>&nbsp;)&nbsp;</td>
<td>&nbsp;&nbsp;&nbsp;((x) * (y))</td>
</tr>
</table>
</div>
<div class="memdoc">
<p><a class="el" href="_sk_math_8h.html#ac995b5abe886001a2be1b63bb652f0c9">SkMulS16(a, b)</a> multiplies a * b, but requires that a and b are both int16_t. With this requirement, we can generate faster instructions on some architectures. </p>
<p>Definition at line <a class="el" href="_sk_math_8h_source.html#l00187">187</a> of file <a class="el" href="_sk_math_8h_source.html">SkMath.h</a>.</p>
</div>
</div>
<a class="anchor" id="afab08772cf54af5b56983cba9fa509c3"></a><!-- doxytag: member="SkMath.h::SkSqrt32" ref="afab08772cf54af5b56983cba9fa509c3" args="(n)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define SkSqrt32</td>
<td>(</td>
<td class="paramtype">n&nbsp;</td>
<td class="paramname"></td>
<td>&nbsp;)&nbsp;</td>
<td>&nbsp;&nbsp;&nbsp;SkSqrtBits(n, 15)</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Return the integer square root of n, treated as a SkFixed (16.16) </p>
<p>Definition at line <a class="el" href="_sk_math_8h_source.html#l00049">49</a> of file <a class="el" href="_sk_math_8h_source.html">SkMath.h</a>.</p>
</div>
</div>
<hr/><h2>Function Documentation</h2>
<a class="anchor" id="a84fb2d86b39452eef0b8a614b8bd7578"></a><!-- doxytag: member="SkMath.h::SkCLZ_portable" ref="a84fb2d86b39452eef0b8a614b8bd7578" args="(uint32_t)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int SkCLZ_portable </td>
<td>(</td>
<td class="paramtype">uint32_t&nbsp;</td>
<td class="paramname"></td>
<td>&nbsp;)&nbsp;</td>
<td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Returns the number of leading zero bits (0...32). </p>
</div>
</div>
<a class="anchor" id="afae7d95657f0e3f7ed82e814548ad481"></a><!-- doxytag: member="SkMath.h::SkCubeRootBits" ref="afae7d95657f0e3f7ed82e814548ad481" args="(int32_t value, int bitBias)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int32_t SkCubeRootBits </td>
<td>(</td>
<td class="paramtype">int32_t&nbsp;</td>
<td class="paramname"> <em>value</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&nbsp;</td>
<td class="paramname"> <em>bitBias</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Return the integer cube root of value, with a bias of bitBias </p>
</div>
</div>
<a class="anchor" id="a1d093e44b78bf74cdbbc42cc60fad438"></a><!-- doxytag: member="SkMath.h::SkDivBits" ref="a1d093e44b78bf74cdbbc42cc60fad438" args="(int32_t numer, int32_t denom, int shift)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int32_t SkDivBits </td>
<td>(</td>
<td class="paramtype">int32_t&nbsp;</td>
<td class="paramname"> <em>numer</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int32_t&nbsp;</td>
<td class="paramname"> <em>denom</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&nbsp;</td>
<td class="paramname"> <em>shift</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Computes (numer1 &lt;&lt; shift) / denom in full 64 intermediate precision. It is an error for denom to be 0. There is no special handling if the result overflows 32bits. </p>
</div>
</div>
<a class="anchor" id="ae43bef67fd5c320215fe2cfdb6ab35ca"></a><!-- doxytag: member="SkMath.h::SkMulDiv" ref="ae43bef67fd5c320215fe2cfdb6ab35ca" args="(int32_t numer1, int32_t numer2, int32_t denom)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int32_t SkMulDiv </td>
<td>(</td>
<td class="paramtype">int32_t&nbsp;</td>
<td class="paramname"> <em>numer1</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int32_t&nbsp;</td>
<td class="paramname"> <em>numer2</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int32_t&nbsp;</td>
<td class="paramname"> <em>denom</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Computes numer1 * numer2 / denom in full 64 intermediate precision. It is an error for denom to be 0. There is no special handling if the result overflows 32bits. </p>
</div>
</div>
<a class="anchor" id="ad1c82f373d385a5821da3a186d93c5ce"></a><!-- doxytag: member="SkMath.h::SkMulShift" ref="ad1c82f373d385a5821da3a186d93c5ce" args="(int32_t a, int32_t b, unsigned shift)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int32_t SkMulShift </td>
<td>(</td>
<td class="paramtype">int32_t&nbsp;</td>
<td class="paramname"> <em>a</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int32_t&nbsp;</td>
<td class="paramname"> <em>b</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned&nbsp;</td>
<td class="paramname"> <em>shift</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Computes the 64bit product of a * b, and then shifts the answer down by shift bits, returning the low 32bits. shift must be [0..63] e.g. to perform a fixedmul, call SkMulShift(a, b, 16) </p>
</div>
</div>
<a class="anchor" id="ab6325ae5ffed98c2af87ef1b37a3411d"></a><!-- doxytag: member="SkMath.h::SkSqrtBits" ref="ab6325ae5ffed98c2af87ef1b37a3411d" args="(int32_t value, int bitBias)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int32_t SkSqrtBits </td>
<td>(</td>
<td class="paramtype">int32_t&nbsp;</td>
<td class="paramname"> <em>value</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&nbsp;</td>
<td class="paramname"> <em>bitBias</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Return the integer square root of value, with a bias of bitBias </p>
</div>
</div>
</div>
<hr size="1"/><address style="text-align: right;"><small>Generated on Tue Oct 20 11:03:40 2009 for Skia by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
</body>
</html>