Sophie

Sophie

distrib > Mandriva > 2010.0 > i586 > media > contrib-release > by-pkgid > 1f2b142b9d2ef4849a6f5316fa1c5b12 > files > 1543

ghc-6.10.4-1mdv2010.0.i586.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--Rendered using the Haskell Html Library v0.2-->
<HTML
><HEAD
><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
><TITLE
>Data.ByteString.Internal</TITLE
><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
><SCRIPT SRC="haddock-util.js" TYPE="text/javascript"
></SCRIPT
><SCRIPT TYPE="text/javascript"
>window.onload = function () {setSynopsis("mini_Data-ByteString-Internal.html")};</SCRIPT
></HEAD
><BODY
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="topbar"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD
><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" "
></TD
><TD CLASS="title"
>bytestring-0.9.1.4: Fast, packed, strict and lazy byte arrays with a list interface</TD
><TD CLASS="topbut"
><A HREF="index.html"
>Contents</A
></TD
><TD CLASS="topbut"
><A HREF="doc-index.html"
>Index</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="modulebar"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD
><FONT SIZE="6"
>Data.ByteString.Internal</FONT
></TD
><TD ALIGN="right"
><TABLE CLASS="narrow" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="infohead"
>Portability</TD
><TD CLASS="infoval"
>portable</TD
></TR
><TR
><TD CLASS="infohead"
>Stability</TD
><TD CLASS="infoval"
>experimental</TD
></TR
><TR
><TD CLASS="infohead"
>Maintainer</TD
><TD CLASS="infoval"
>Don Stewart &lt;dons@galois.com&gt;</TD
></TR
></TABLE
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="section4"
><B
>Contents</B
></TD
></TR
><TR
><TD
><DL
><DT
><A HREF="#1"
>The <TT
>ByteString</TT
> type and representation
</A
></DT
><DT
><A HREF="#2"
>Low level introduction and elimination
</A
></DT
><DT
><A HREF="#3"
>Conversion to and from ForeignPtrs
</A
></DT
><DT
><A HREF="#4"
>Utilities
</A
></DT
><DT
><A HREF="#5"
>Standard C Functions
</A
></DT
><DT
><A HREF="#6"
>cbits functions
</A
></DT
><DT
><A HREF="#7"
>Internal GHC magic
</A
></DT
><DT
><A HREF="#8"
>Chars
</A
></DT
></DL
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section1"
>Description</TD
></TR
><TR
><TD CLASS="doc"
>A module containing semi-public <TT
><A HREF="Data-ByteString-Internal.html#t%3AByteString"
>ByteString</A
></TT
> internals. This exposes
 the <TT
><A HREF="Data-ByteString-Internal.html#t%3AByteString"
>ByteString</A
></TT
> representation and low level construction functions.
 Modules which extend the <TT
><A HREF="Data-ByteString-Internal.html#t%3AByteString"
>ByteString</A
></TT
> system will need to use this module
 while ideally most users will be able to make do with the public interface
 modules.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section1"
>Synopsis</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="decl"
><SPAN CLASS="keyword"
>data</SPAN
>  <A HREF="#t%3AByteString"
>ByteString</A
>  = <A HREF="#v%3APS"
>PS</A
> !(<A HREF="../base/Foreign-ForeignPtr.html#t%3AForeignPtr"
>ForeignPtr</A
> <A HREF="../base/Data-Word.html#t%3AWord8"
>Word8</A
>) !<A HREF="../ghc-prim/GHC-Types.html#t%3AInt"
>Int</A
> !<A HREF="../ghc-prim/GHC-Types.html#t%3AInt"
>Int</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3Acreate"
>create</A
> :: <A HREF="../ghc-prim/GHC-Types.html#t%3AInt"
>Int</A
> -&gt; (<A HREF="../base/Foreign-Ptr.html#t%3APtr"
>Ptr</A
> <A HREF="../base/Data-Word.html#t%3AWord8"
>Word8</A
> -&gt; <A HREF="../base/System-IO.html#t%3AIO"
>IO</A
> <A HREF="../ghc-prim/GHC-Unit.html#t%3A%28%29"
>()</A
>) -&gt; <A HREF="../base/System-IO.html#t%3AIO"
>IO</A
> <A HREF="Data-ByteString-Internal.html#t%3AByteString"
>ByteString</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AcreateAndTrim"
>createAndTrim</A
> :: <A HREF="../ghc-prim/GHC-Types.html#t%3AInt"
>Int</A
> -&gt; (<A HREF="../base/Foreign-Ptr.html#t%3APtr"
>Ptr</A
> <A HREF="../base/Data-Word.html#t%3AWord8"
>Word8</A
> -&gt; <A HREF="../base/System-IO.html#t%3AIO"
>IO</A
> <A HREF="../ghc-prim/GHC-Types.html#t%3AInt"
>Int</A
>) -&gt; <A HREF="../base/System-IO.html#t%3AIO"
>IO</A
> <A HREF="Data-ByteString-Internal.html#t%3AByteString"
>ByteString</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AcreateAndTrim%27"
>createAndTrim'</A
> ::  <A HREF="../ghc-prim/GHC-Types.html#t%3AInt"
>Int</A
> -&gt; (<A HREF="../base/Foreign-Ptr.html#t%3APtr"
>Ptr</A
> <A HREF="../base/Data-Word.html#t%3AWord8"
>Word8</A
> -&gt; <A HREF="../base/System-IO.html#t%3AIO"
>IO</A
> (<A HREF="../ghc-prim/GHC-Types.html#t%3AInt"
>Int</A
>, <A HREF="../ghc-prim/GHC-Types.html#t%3AInt"
>Int</A
>, a)) -&gt; <A HREF="../base/System-IO.html#t%3AIO"
>IO</A
> (<A HREF="Data-ByteString-Internal.html#t%3AByteString"
>ByteString</A
>, a)</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AunsafeCreate"
>unsafeCreate</A
> :: <A HREF="../ghc-prim/GHC-Types.html#t%3AInt"
>Int</A
> -&gt; (<A HREF="../base/Foreign-Ptr.html#t%3APtr"
>Ptr</A
> <A HREF="../base/Data-Word.html#t%3AWord8"
>Word8</A
> -&gt; <A HREF="../base/System-IO.html#t%3AIO"
>IO</A
> <A HREF="../ghc-prim/GHC-Unit.html#t%3A%28%29"
>()</A
>) -&gt; <A HREF="Data-ByteString-Internal.html#t%3AByteString"
>ByteString</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AmallocByteString"
>mallocByteString</A
> ::  <A HREF="../ghc-prim/GHC-Types.html#t%3AInt"
>Int</A
> -&gt; <A HREF="../base/System-IO.html#t%3AIO"
>IO</A
> (<A HREF="../base/Foreign-ForeignPtr.html#t%3AForeignPtr"
>ForeignPtr</A
> a)</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AfromForeignPtr"
>fromForeignPtr</A
> :: <A HREF="../base/Foreign-ForeignPtr.html#t%3AForeignPtr"
>ForeignPtr</A
> <A HREF="../base/Data-Word.html#t%3AWord8"
>Word8</A
> -&gt; <A HREF="../ghc-prim/GHC-Types.html#t%3AInt"
>Int</A
> -&gt; <A HREF="../ghc-prim/GHC-Types.html#t%3AInt"
>Int</A
> -&gt; <A HREF="Data-ByteString-Internal.html#t%3AByteString"
>ByteString</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AtoForeignPtr"
>toForeignPtr</A
> :: <A HREF="Data-ByteString-Internal.html#t%3AByteString"
>ByteString</A
> -&gt; (<A HREF="../base/Foreign-ForeignPtr.html#t%3AForeignPtr"
>ForeignPtr</A
> <A HREF="../base/Data-Word.html#t%3AWord8"
>Word8</A
>, <A HREF="../ghc-prim/GHC-Types.html#t%3AInt"
>Int</A
>, <A HREF="../ghc-prim/GHC-Types.html#t%3AInt"
>Int</A
>)</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AinlinePerformIO"
>inlinePerformIO</A
> ::  <A HREF="../base/System-IO.html#t%3AIO"
>IO</A
> a -&gt; a</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AnullForeignPtr"
>nullForeignPtr</A
> :: <A HREF="../base/Foreign-ForeignPtr.html#t%3AForeignPtr"
>ForeignPtr</A
> <A HREF="../base/Data-Word.html#t%3AWord8"
>Word8</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3Ac_strlen"
>c_strlen</A
> :: <A HREF="../base/Foreign-C-String.html#t%3ACString"
>CString</A
> -&gt; <A HREF="../base/System-IO.html#t%3AIO"
>IO</A
> <A HREF="../base/Foreign-C-Types.html#t%3ACSize"
>CSize</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3Ac_free_finalizer"
>c_free_finalizer</A
> :: <A HREF="../base/Foreign-Ptr.html#t%3AFunPtr"
>FunPtr</A
> (<A HREF="../base/Foreign-Ptr.html#t%3APtr"
>Ptr</A
> <A HREF="../base/Data-Word.html#t%3AWord8"
>Word8</A
> -&gt; <A HREF="../base/System-IO.html#t%3AIO"
>IO</A
> <A HREF="../ghc-prim/GHC-Unit.html#t%3A%28%29"
>()</A
>)</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3Amemchr"
>memchr</A
> :: <A HREF="../base/Foreign-Ptr.html#t%3APtr"
>Ptr</A
> <A HREF="../base/Data-Word.html#t%3AWord8"
>Word8</A
> -&gt; <A HREF="../base/Data-Word.html#t%3AWord8"
>Word8</A
> -&gt; <A HREF="../base/Foreign-C-Types.html#t%3ACSize"
>CSize</A
> -&gt; <A HREF="../base/System-IO.html#t%3AIO"
>IO</A
> (<A HREF="../base/Foreign-Ptr.html#t%3APtr"
>Ptr</A
> <A HREF="../base/Data-Word.html#t%3AWord8"
>Word8</A
>)</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3Amemcmp"
>memcmp</A
> :: <A HREF="../base/Foreign-Ptr.html#t%3APtr"
>Ptr</A
> <A HREF="../base/Data-Word.html#t%3AWord8"
>Word8</A
> -&gt; <A HREF="../base/Foreign-Ptr.html#t%3APtr"
>Ptr</A
> <A HREF="../base/Data-Word.html#t%3AWord8"
>Word8</A
> -&gt; <A HREF="../base/Foreign-C-Types.html#t%3ACSize"
>CSize</A
> -&gt; <A HREF="../base/System-IO.html#t%3AIO"
>IO</A
> <A HREF="../base/Foreign-C-Types.html#t%3ACInt"
>CInt</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3Amemcpy"
>memcpy</A
> :: <A HREF="../base/Foreign-Ptr.html#t%3APtr"
>Ptr</A
> <A HREF="../base/Data-Word.html#t%3AWord8"
>Word8</A
> -&gt; <A HREF="../base/Foreign-Ptr.html#t%3APtr"
>Ptr</A
> <A HREF="../base/Data-Word.html#t%3AWord8"
>Word8</A
> -&gt; <A HREF="../base/Foreign-C-Types.html#t%3ACSize"
>CSize</A
> -&gt; <A HREF="../base/System-IO.html#t%3AIO"
>IO</A
> <A HREF="../ghc-prim/GHC-Unit.html#t%3A%28%29"
>()</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3Amemset"
>memset</A
> :: <A HREF="../base/Foreign-Ptr.html#t%3APtr"
>Ptr</A
> <A HREF="../base/Data-Word.html#t%3AWord8"
>Word8</A
> -&gt; <A HREF="../base/Data-Word.html#t%3AWord8"
>Word8</A
> -&gt; <A HREF="../base/Foreign-C-Types.html#t%3ACSize"
>CSize</A
> -&gt; <A HREF="../base/System-IO.html#t%3AIO"
>IO</A
> (<A HREF="../base/Foreign-Ptr.html#t%3APtr"
>Ptr</A
> <A HREF="../base/Data-Word.html#t%3AWord8"
>Word8</A
>)</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3Ac_reverse"
>c_reverse</A
> :: <A HREF="../base/Foreign-Ptr.html#t%3APtr"
>Ptr</A
> <A HREF="../base/Data-Word.html#t%3AWord8"
>Word8</A
> -&gt; <A HREF="../base/Foreign-Ptr.html#t%3APtr"
>Ptr</A
> <A HREF="../base/Data-Word.html#t%3AWord8"
>Word8</A
> -&gt; <A HREF="../base/Foreign-C-Types.html#t%3ACULong"
>CULong</A
> -&gt; <A HREF="../base/System-IO.html#t%3AIO"
>IO</A
> <A HREF="../ghc-prim/GHC-Unit.html#t%3A%28%29"
>()</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3Ac_intersperse"
>c_intersperse</A
> :: <A HREF="../base/Foreign-Ptr.html#t%3APtr"
>Ptr</A
> <A HREF="../base/Data-Word.html#t%3AWord8"
>Word8</A
> -&gt; <A HREF="../base/Foreign-Ptr.html#t%3APtr"
>Ptr</A
> <A HREF="../base/Data-Word.html#t%3AWord8"
>Word8</A
> -&gt; <A HREF="../base/Foreign-C-Types.html#t%3ACULong"
>CULong</A
> -&gt; <A HREF="../base/Data-Word.html#t%3AWord8"
>Word8</A
> -&gt; <A HREF="../base/System-IO.html#t%3AIO"
>IO</A
> <A HREF="../ghc-prim/GHC-Unit.html#t%3A%28%29"
>()</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3Ac_maximum"
>c_maximum</A
> :: <A HREF="../base/Foreign-Ptr.html#t%3APtr"
>Ptr</A
> <A HREF="../base/Data-Word.html#t%3AWord8"
>Word8</A
> -&gt; <A HREF="../base/Foreign-C-Types.html#t%3ACULong"
>CULong</A
> -&gt; <A HREF="../base/System-IO.html#t%3AIO"
>IO</A
> <A HREF="../base/Data-Word.html#t%3AWord8"
>Word8</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3Ac_minimum"
>c_minimum</A
> :: <A HREF="../base/Foreign-Ptr.html#t%3APtr"
>Ptr</A
> <A HREF="../base/Data-Word.html#t%3AWord8"
>Word8</A
> -&gt; <A HREF="../base/Foreign-C-Types.html#t%3ACULong"
>CULong</A
> -&gt; <A HREF="../base/System-IO.html#t%3AIO"
>IO</A
> <A HREF="../base/Data-Word.html#t%3AWord8"
>Word8</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3Ac_count"
>c_count</A
> :: <A HREF="../base/Foreign-Ptr.html#t%3APtr"
>Ptr</A
> <A HREF="../base/Data-Word.html#t%3AWord8"
>Word8</A
> -&gt; <A HREF="../base/Foreign-C-Types.html#t%3ACULong"
>CULong</A
> -&gt; <A HREF="../base/Data-Word.html#t%3AWord8"
>Word8</A
> -&gt; <A HREF="../base/System-IO.html#t%3AIO"
>IO</A
> <A HREF="../base/Foreign-C-Types.html#t%3ACULong"
>CULong</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3Amemcpy_ptr_baoff"
>memcpy_ptr_baoff</A
> ::  <A HREF="../base/Foreign-Ptr.html#t%3APtr"
>Ptr</A
> a -&gt; RawBuffer -&gt; <A HREF="../base/Foreign-C-Types.html#t%3ACInt"
>CInt</A
> -&gt; <A HREF="../base/Foreign-C-Types.html#t%3ACSize"
>CSize</A
> -&gt; <A HREF="../base/System-IO.html#t%3AIO"
>IO</A
> (<A HREF="../base/Foreign-Ptr.html#t%3APtr"
>Ptr</A
> <A HREF="../ghc-prim/GHC-Unit.html#t%3A%28%29"
>()</A
>)</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3Aw2c"
>w2c</A
> :: <A HREF="../base/Data-Word.html#t%3AWord8"
>Word8</A
> -&gt; <A HREF="../ghc-prim/GHC-Types.html#t%3AChar"
>Char</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3Ac2w"
>c2w</A
> :: <A HREF="../ghc-prim/GHC-Types.html#t%3AChar"
>Char</A
> -&gt; <A HREF="../base/Data-Word.html#t%3AWord8"
>Word8</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AisSpaceWord8"
>isSpaceWord8</A
> :: <A HREF="../base/Data-Word.html#t%3AWord8"
>Word8</A
> -&gt; <A HREF="../ghc-prim/GHC-Bool.html#t%3ABool"
>Bool</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AisSpaceChar8"
>isSpaceChar8</A
> :: <A HREF="../ghc-prim/GHC-Types.html#t%3AChar"
>Char</A
> -&gt; <A HREF="../ghc-prim/GHC-Bool.html#t%3ABool"
>Bool</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section1"
><A NAME="1"
><A NAME="1"
>The <TT
>ByteString</TT
> type and representation
</A
></A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><SPAN CLASS="keyword"
>data</SPAN
>  <A NAME="t:ByteString"
><A NAME="t%3AByteString"
></A
></A
><B
>ByteString</B
>  </TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="ndoc"
><P
>A space-efficient representation of a Word8 vector, supporting many
 efficient operations.  A <TT
><A HREF="Data-ByteString-Internal.html#t%3AByteString"
>ByteString</A
></TT
> contains 8-bit characters only.
</P
><P
>Instances of Eq, Ord, Read, Show, Data, Typeable
</P
></TD
></TR
><TR
><TD CLASS="section4"
>Constructors</TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0"
><TR
><TD CLASS="arg"
><A NAME="v:PS"
><A NAME="v%3APS"
></A
></A
><B
>PS</B
> !(<A HREF="../base/Foreign-ForeignPtr.html#t%3AForeignPtr"
>ForeignPtr</A
> <A HREF="../base/Data-Word.html#t%3AWord8"
>Word8</A
>) !<A HREF="../ghc-prim/GHC-Types.html#t%3AInt"
>Int</A
> !<A HREF="../ghc-prim/GHC-Types.html#t%3AInt"
>Int</A
></TD
><TD CLASS="rdoc"
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="section4"
><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'i:ByteString')" ALT="show/hide"
> Instances</TD
></TR
><TR
><TD CLASS="body"
><DIV ID="i:ByteString" STYLE="display:block;"
><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0"
><TR
><TD CLASS="decl"
><A HREF="../base/Data-Eq.html#t%3AEq"
>Eq</A
> <A HREF="Data-ByteString-Internal.html#t%3AByteString"
>ByteString</A
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="../base/Data-Data.html#t%3AData"
>Data</A
> <A HREF="Data-ByteString-Internal.html#t%3AByteString"
>ByteString</A
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="../base/Data-Ord.html#t%3AOrd"
>Ord</A
> <A HREF="Data-ByteString-Internal.html#t%3AByteString"
>ByteString</A
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="../base/Text-Read.html#t%3ARead"
>Read</A
> <A HREF="Data-ByteString-Internal.html#t%3AByteString"
>ByteString</A
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="../base/Text-Show.html#t%3AShow"
>Show</A
> <A HREF="Data-ByteString-Internal.html#t%3AByteString"
>ByteString</A
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="../base/Data-Typeable.html#t%3ATypeable"
>Typeable</A
> <A HREF="Data-ByteString-Internal.html#t%3AByteString"
>ByteString</A
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="../base/Data-String.html#t%3AIsString"
>IsString</A
> <A HREF="Data-ByteString-Internal.html#t%3AByteString"
>ByteString</A
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="../base/Data-Monoid.html#t%3AMonoid"
>Monoid</A
> <A HREF="Data-ByteString-Internal.html#t%3AByteString"
>ByteString</A
></TD
></TR
></TABLE
></DIV
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section1"
><A NAME="2"
><A NAME="2"
>Low level introduction and elimination
</A
></A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:create"
><A NAME="v%3Acreate"
></A
></A
><B
>create</B
> :: <A HREF="../ghc-prim/GHC-Types.html#t%3AInt"
>Int</A
> -&gt; (<A HREF="../base/Foreign-Ptr.html#t%3APtr"
>Ptr</A
> <A HREF="../base/Data-Word.html#t%3AWord8"
>Word8</A
> -&gt; <A HREF="../base/System-IO.html#t%3AIO"
>IO</A
> <A HREF="../ghc-prim/GHC-Unit.html#t%3A%28%29"
>()</A
>) -&gt; <A HREF="../base/System-IO.html#t%3AIO"
>IO</A
> <A HREF="Data-ByteString-Internal.html#t%3AByteString"
>ByteString</A
></TD
></TR
><TR
><TD CLASS="doc"
>Create ByteString of size <TT
>l</TT
> and use action <TT
>f</TT
> to fill it's contents.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:createAndTrim"
><A NAME="v%3AcreateAndTrim"
></A
></A
><B
>createAndTrim</B
> :: <A HREF="../ghc-prim/GHC-Types.html#t%3AInt"
>Int</A
> -&gt; (<A HREF="../base/Foreign-Ptr.html#t%3APtr"
>Ptr</A
> <A HREF="../base/Data-Word.html#t%3AWord8"
>Word8</A
> -&gt; <A HREF="../base/System-IO.html#t%3AIO"
>IO</A
> <A HREF="../ghc-prim/GHC-Types.html#t%3AInt"
>Int</A
>) -&gt; <A HREF="../base/System-IO.html#t%3AIO"
>IO</A
> <A HREF="Data-ByteString-Internal.html#t%3AByteString"
>ByteString</A
></TD
></TR
><TR
><TD CLASS="doc"
><P
>Given the maximum size needed and a function to make the contents
 of a ByteString, createAndTrim makes the <TT
><A HREF="Data-ByteString-Internal.html#t%3AByteString"
>ByteString</A
></TT
>. The generating
 function is required to return the actual final size (&lt;= the maximum
 size), and the resulting byte array is realloced to this size.
</P
><P
>createAndTrim is the main mechanism for creating custom, efficient
 ByteString functions, using Haskell or C functions to fill the space.
</P
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:createAndTrim'"
><A NAME="v%3AcreateAndTrim%27"
></A
></A
><B
>createAndTrim'</B
> ::  <A HREF="../ghc-prim/GHC-Types.html#t%3AInt"
>Int</A
> -&gt; (<A HREF="../base/Foreign-Ptr.html#t%3APtr"
>Ptr</A
> <A HREF="../base/Data-Word.html#t%3AWord8"
>Word8</A
> -&gt; <A HREF="../base/System-IO.html#t%3AIO"
>IO</A
> (<A HREF="../ghc-prim/GHC-Types.html#t%3AInt"
>Int</A
>, <A HREF="../ghc-prim/GHC-Types.html#t%3AInt"
>Int</A
>, a)) -&gt; <A HREF="../base/System-IO.html#t%3AIO"
>IO</A
> (<A HREF="Data-ByteString-Internal.html#t%3AByteString"
>ByteString</A
>, a)</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:unsafeCreate"
><A NAME="v%3AunsafeCreate"
></A
></A
><B
>unsafeCreate</B
> :: <A HREF="../ghc-prim/GHC-Types.html#t%3AInt"
>Int</A
> -&gt; (<A HREF="../base/Foreign-Ptr.html#t%3APtr"
>Ptr</A
> <A HREF="../base/Data-Word.html#t%3AWord8"
>Word8</A
> -&gt; <A HREF="../base/System-IO.html#t%3AIO"
>IO</A
> <A HREF="../ghc-prim/GHC-Unit.html#t%3A%28%29"
>()</A
>) -&gt; <A HREF="Data-ByteString-Internal.html#t%3AByteString"
>ByteString</A
></TD
></TR
><TR
><TD CLASS="doc"
>A way of creating ByteStrings outside the IO monad. The <TT
>Int</TT
>
 argument gives the final size of the ByteString. Unlike
 <TT
><A HREF="Data-ByteString-Internal.html#v%3AcreateAndTrim"
>createAndTrim</A
></TT
> the ByteString is not reallocated if the final size
 is less than the estimated size.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:mallocByteString"
><A NAME="v%3AmallocByteString"
></A
></A
><B
>mallocByteString</B
> ::  <A HREF="../ghc-prim/GHC-Types.html#t%3AInt"
>Int</A
> -&gt; <A HREF="../base/System-IO.html#t%3AIO"
>IO</A
> (<A HREF="../base/Foreign-ForeignPtr.html#t%3AForeignPtr"
>ForeignPtr</A
> a)</TD
></TR
><TR
><TD CLASS="doc"
>Wrapper of mallocForeignPtrBytes with faster implementation
 for GHC 6.5 builds newer than 06<EM
>06</EM
>06
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section1"
><A NAME="3"
><A NAME="3"
>Conversion to and from ForeignPtrs
</A
></A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:fromForeignPtr"
><A NAME="v%3AfromForeignPtr"
></A
></A
><B
>fromForeignPtr</B
></TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="arg"
>:: <A HREF="../base/Foreign-ForeignPtr.html#t%3AForeignPtr"
>ForeignPtr</A
> <A HREF="../base/Data-Word.html#t%3AWord8"
>Word8</A
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
>-&gt; <A HREF="../ghc-prim/GHC-Types.html#t%3AInt"
>Int</A
></TD
><TD CLASS="rdoc"
>Offset
</TD
></TR
><TR
><TD CLASS="arg"
>-&gt; <A HREF="../ghc-prim/GHC-Types.html#t%3AInt"
>Int</A
></TD
><TD CLASS="rdoc"
>Length
</TD
></TR
><TR
><TD CLASS="arg"
>-&gt; <A HREF="Data-ByteString-Internal.html#t%3AByteString"
>ByteString</A
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="ndoc" COLSPAN="2"
><EM
>O(1)</EM
> Build a ByteString from a ForeignPtr
</TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:toForeignPtr"
><A NAME="v%3AtoForeignPtr"
></A
></A
><B
>toForeignPtr</B
></TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="arg"
>:: <A HREF="Data-ByteString-Internal.html#t%3AByteString"
>ByteString</A
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
>-&gt; (<A HREF="../base/Foreign-ForeignPtr.html#t%3AForeignPtr"
>ForeignPtr</A
> <A HREF="../base/Data-Word.html#t%3AWord8"
>Word8</A
>, <A HREF="../ghc-prim/GHC-Types.html#t%3AInt"
>Int</A
>, <A HREF="../ghc-prim/GHC-Types.html#t%3AInt"
>Int</A
>)</TD
><TD CLASS="rdoc"
>(ptr, offset, length)
</TD
></TR
><TR
><TD CLASS="ndoc" COLSPAN="2"
><EM
>O(1)</EM
> Deconstruct a ForeignPtr from a ByteString
</TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section1"
><A NAME="4"
><A NAME="4"
>Utilities
</A
></A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:inlinePerformIO"
><A NAME="v%3AinlinePerformIO"
></A
></A
><B
>inlinePerformIO</B
> ::  <A HREF="../base/System-IO.html#t%3AIO"
>IO</A
> a -&gt; a</TD
></TR
><TR
><TD CLASS="doc"
>Just like unsafePerformIO, but we inline it. Big performance gains as
 it exposes lots of things to further inlining. <EM
>Very unsafe</EM
>. In
 particular, you should do no memory allocation inside an
 <TT
><A HREF="Data-ByteString-Internal.html#v%3AinlinePerformIO"
>inlinePerformIO</A
></TT
> block. On Hugs this is just <TT
>unsafePerformIO</TT
>.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:nullForeignPtr"
><A NAME="v%3AnullForeignPtr"
></A
></A
><B
>nullForeignPtr</B
> :: <A HREF="../base/Foreign-ForeignPtr.html#t%3AForeignPtr"
>ForeignPtr</A
> <A HREF="../base/Data-Word.html#t%3AWord8"
>Word8</A
></TD
></TR
><TR
><TD CLASS="doc"
>The 0 pointer. Used to indicate the empty Bytestring.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section1"
><A NAME="5"
><A NAME="5"
>Standard C Functions
</A
></A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:c_strlen"
><A NAME="v%3Ac_strlen"
></A
></A
><B
>c_strlen</B
> :: <A HREF="../base/Foreign-C-String.html#t%3ACString"
>CString</A
> -&gt; <A HREF="../base/System-IO.html#t%3AIO"
>IO</A
> <A HREF="../base/Foreign-C-Types.html#t%3ACSize"
>CSize</A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:c_free_finalizer"
><A NAME="v%3Ac_free_finalizer"
></A
></A
><B
>c_free_finalizer</B
> :: <A HREF="../base/Foreign-Ptr.html#t%3AFunPtr"
>FunPtr</A
> (<A HREF="../base/Foreign-Ptr.html#t%3APtr"
>Ptr</A
> <A HREF="../base/Data-Word.html#t%3AWord8"
>Word8</A
> -&gt; <A HREF="../base/System-IO.html#t%3AIO"
>IO</A
> <A HREF="../ghc-prim/GHC-Unit.html#t%3A%28%29"
>()</A
>)</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:memchr"
><A NAME="v%3Amemchr"
></A
></A
><B
>memchr</B
> :: <A HREF="../base/Foreign-Ptr.html#t%3APtr"
>Ptr</A
> <A HREF="../base/Data-Word.html#t%3AWord8"
>Word8</A
> -&gt; <A HREF="../base/Data-Word.html#t%3AWord8"
>Word8</A
> -&gt; <A HREF="../base/Foreign-C-Types.html#t%3ACSize"
>CSize</A
> -&gt; <A HREF="../base/System-IO.html#t%3AIO"
>IO</A
> (<A HREF="../base/Foreign-Ptr.html#t%3APtr"
>Ptr</A
> <A HREF="../base/Data-Word.html#t%3AWord8"
>Word8</A
>)</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:memcmp"
><A NAME="v%3Amemcmp"
></A
></A
><B
>memcmp</B
> :: <A HREF="../base/Foreign-Ptr.html#t%3APtr"
>Ptr</A
> <A HREF="../base/Data-Word.html#t%3AWord8"
>Word8</A
> -&gt; <A HREF="../base/Foreign-Ptr.html#t%3APtr"
>Ptr</A
> <A HREF="../base/Data-Word.html#t%3AWord8"
>Word8</A
> -&gt; <A HREF="../base/Foreign-C-Types.html#t%3ACSize"
>CSize</A
> -&gt; <A HREF="../base/System-IO.html#t%3AIO"
>IO</A
> <A HREF="../base/Foreign-C-Types.html#t%3ACInt"
>CInt</A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:memcpy"
><A NAME="v%3Amemcpy"
></A
></A
><B
>memcpy</B
> :: <A HREF="../base/Foreign-Ptr.html#t%3APtr"
>Ptr</A
> <A HREF="../base/Data-Word.html#t%3AWord8"
>Word8</A
> -&gt; <A HREF="../base/Foreign-Ptr.html#t%3APtr"
>Ptr</A
> <A HREF="../base/Data-Word.html#t%3AWord8"
>Word8</A
> -&gt; <A HREF="../base/Foreign-C-Types.html#t%3ACSize"
>CSize</A
> -&gt; <A HREF="../base/System-IO.html#t%3AIO"
>IO</A
> <A HREF="../ghc-prim/GHC-Unit.html#t%3A%28%29"
>()</A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:memset"
><A NAME="v%3Amemset"
></A
></A
><B
>memset</B
> :: <A HREF="../base/Foreign-Ptr.html#t%3APtr"
>Ptr</A
> <A HREF="../base/Data-Word.html#t%3AWord8"
>Word8</A
> -&gt; <A HREF="../base/Data-Word.html#t%3AWord8"
>Word8</A
> -&gt; <A HREF="../base/Foreign-C-Types.html#t%3ACSize"
>CSize</A
> -&gt; <A HREF="../base/System-IO.html#t%3AIO"
>IO</A
> (<A HREF="../base/Foreign-Ptr.html#t%3APtr"
>Ptr</A
> <A HREF="../base/Data-Word.html#t%3AWord8"
>Word8</A
>)</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section1"
><A NAME="6"
><A NAME="6"
>cbits functions
</A
></A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:c_reverse"
><A NAME="v%3Ac_reverse"
></A
></A
><B
>c_reverse</B
> :: <A HREF="../base/Foreign-Ptr.html#t%3APtr"
>Ptr</A
> <A HREF="../base/Data-Word.html#t%3AWord8"
>Word8</A
> -&gt; <A HREF="../base/Foreign-Ptr.html#t%3APtr"
>Ptr</A
> <A HREF="../base/Data-Word.html#t%3AWord8"
>Word8</A
> -&gt; <A HREF="../base/Foreign-C-Types.html#t%3ACULong"
>CULong</A
> -&gt; <A HREF="../base/System-IO.html#t%3AIO"
>IO</A
> <A HREF="../ghc-prim/GHC-Unit.html#t%3A%28%29"
>()</A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:c_intersperse"
><A NAME="v%3Ac_intersperse"
></A
></A
><B
>c_intersperse</B
> :: <A HREF="../base/Foreign-Ptr.html#t%3APtr"
>Ptr</A
> <A HREF="../base/Data-Word.html#t%3AWord8"
>Word8</A
> -&gt; <A HREF="../base/Foreign-Ptr.html#t%3APtr"
>Ptr</A
> <A HREF="../base/Data-Word.html#t%3AWord8"
>Word8</A
> -&gt; <A HREF="../base/Foreign-C-Types.html#t%3ACULong"
>CULong</A
> -&gt; <A HREF="../base/Data-Word.html#t%3AWord8"
>Word8</A
> -&gt; <A HREF="../base/System-IO.html#t%3AIO"
>IO</A
> <A HREF="../ghc-prim/GHC-Unit.html#t%3A%28%29"
>()</A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:c_maximum"
><A NAME="v%3Ac_maximum"
></A
></A
><B
>c_maximum</B
> :: <A HREF="../base/Foreign-Ptr.html#t%3APtr"
>Ptr</A
> <A HREF="../base/Data-Word.html#t%3AWord8"
>Word8</A
> -&gt; <A HREF="../base/Foreign-C-Types.html#t%3ACULong"
>CULong</A
> -&gt; <A HREF="../base/System-IO.html#t%3AIO"
>IO</A
> <A HREF="../base/Data-Word.html#t%3AWord8"
>Word8</A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:c_minimum"
><A NAME="v%3Ac_minimum"
></A
></A
><B
>c_minimum</B
> :: <A HREF="../base/Foreign-Ptr.html#t%3APtr"
>Ptr</A
> <A HREF="../base/Data-Word.html#t%3AWord8"
>Word8</A
> -&gt; <A HREF="../base/Foreign-C-Types.html#t%3ACULong"
>CULong</A
> -&gt; <A HREF="../base/System-IO.html#t%3AIO"
>IO</A
> <A HREF="../base/Data-Word.html#t%3AWord8"
>Word8</A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:c_count"
><A NAME="v%3Ac_count"
></A
></A
><B
>c_count</B
> :: <A HREF="../base/Foreign-Ptr.html#t%3APtr"
>Ptr</A
> <A HREF="../base/Data-Word.html#t%3AWord8"
>Word8</A
> -&gt; <A HREF="../base/Foreign-C-Types.html#t%3ACULong"
>CULong</A
> -&gt; <A HREF="../base/Data-Word.html#t%3AWord8"
>Word8</A
> -&gt; <A HREF="../base/System-IO.html#t%3AIO"
>IO</A
> <A HREF="../base/Foreign-C-Types.html#t%3ACULong"
>CULong</A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section1"
><A NAME="7"
><A NAME="7"
>Internal GHC magic
</A
></A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:memcpy_ptr_baoff"
><A NAME="v%3Amemcpy_ptr_baoff"
></A
></A
><B
>memcpy_ptr_baoff</B
> ::  <A HREF="../base/Foreign-Ptr.html#t%3APtr"
>Ptr</A
> a -&gt; RawBuffer -&gt; <A HREF="../base/Foreign-C-Types.html#t%3ACInt"
>CInt</A
> -&gt; <A HREF="../base/Foreign-C-Types.html#t%3ACSize"
>CSize</A
> -&gt; <A HREF="../base/System-IO.html#t%3AIO"
>IO</A
> (<A HREF="../base/Foreign-Ptr.html#t%3APtr"
>Ptr</A
> <A HREF="../ghc-prim/GHC-Unit.html#t%3A%28%29"
>()</A
>)</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section1"
><A NAME="8"
><A NAME="8"
>Chars
</A
></A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:w2c"
><A NAME="v%3Aw2c"
></A
></A
><B
>w2c</B
> :: <A HREF="../base/Data-Word.html#t%3AWord8"
>Word8</A
> -&gt; <A HREF="../ghc-prim/GHC-Types.html#t%3AChar"
>Char</A
></TD
></TR
><TR
><TD CLASS="doc"
>Conversion between <TT
><A HREF="../base/Data-Word.html#t%3AWord8"
>Word8</A
></TT
> and <TT
><A HREF="../ghc-prim/GHC-Types.html#t%3AChar"
>Char</A
></TT
>. Should compile to a no-op.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:c2w"
><A NAME="v%3Ac2w"
></A
></A
><B
>c2w</B
> :: <A HREF="../ghc-prim/GHC-Types.html#t%3AChar"
>Char</A
> -&gt; <A HREF="../base/Data-Word.html#t%3AWord8"
>Word8</A
></TD
></TR
><TR
><TD CLASS="doc"
>Unsafe conversion between <TT
><A HREF="../ghc-prim/GHC-Types.html#t%3AChar"
>Char</A
></TT
> and <TT
><A HREF="../base/Data-Word.html#t%3AWord8"
>Word8</A
></TT
>. This is a no-op and
 silently truncates to 8 bits Chars &gt; '\255'. It is provided as
 convenience for ByteString construction.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:isSpaceWord8"
><A NAME="v%3AisSpaceWord8"
></A
></A
><B
>isSpaceWord8</B
> :: <A HREF="../base/Data-Word.html#t%3AWord8"
>Word8</A
> -&gt; <A HREF="../ghc-prim/GHC-Bool.html#t%3ABool"
>Bool</A
></TD
></TR
><TR
><TD CLASS="doc"
>Selects words corresponding to white-space characters in the Latin-1 range
 ordered by frequency. 
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:isSpaceChar8"
><A NAME="v%3AisSpaceChar8"
></A
></A
><B
>isSpaceChar8</B
> :: <A HREF="../ghc-prim/GHC-Types.html#t%3AChar"
>Char</A
> -&gt; <A HREF="../ghc-prim/GHC-Bool.html#t%3ABool"
>Bool</A
></TD
></TR
><TR
><TD CLASS="doc"
>Selects white-space characters in the Latin-1 range
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="botbar"
>Produced by <A HREF="http://www.haskell.org/haddock/"
>Haddock</A
> version 2.4.2</TD
></TR
></TABLE
></BODY
></HTML
>