This file is indexed.

/usr/share/doc/libghc-blaze-builder-doc/html/src/Blaze-ByteString-Builder-ByteString.html is in libghc-blaze-builder-doc 0.4.0.1-3build1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<!-- Generated by HsColour, http://code.haskell.org/~malcolm/hscolour/ -->
<title>Blaze/ByteString/Builder/ByteString.hs</title>
<link type='text/css' rel='stylesheet' href='hscolour.css' />
</head>
<body>
<pre><a name="line-1"></a><span class='hs-comment'>------------------------------------------------------------------------------</span>
<a name="line-2"></a><span class='hs-comment'>-- |</span>
<a name="line-3"></a><span class='hs-comment'>-- Module:      Blaze.ByteString.Builder.ByteString</span>
<a name="line-4"></a><span class='hs-comment'>-- Copyright:   (c) 2013 Leon P Smith</span>
<a name="line-5"></a><span class='hs-comment'>-- License:     BSD3</span>
<a name="line-6"></a><span class='hs-comment'>-- Maintainer:  Leon P Smith &lt;leon@melding-monads.com&gt;</span>
<a name="line-7"></a><span class='hs-comment'>-- Stability:   experimental</span>
<a name="line-8"></a><span class='hs-comment'>--</span>
<a name="line-9"></a><span class='hs-comment'>-- 'Write's and 'B.Builder's for strict and lazy bytestrings.</span>
<a name="line-10"></a><span class='hs-comment'>--</span>
<a name="line-11"></a><span class='hs-comment'>-- We assume the following qualified imports in order to differentiate between</span>
<a name="line-12"></a><span class='hs-comment'>-- strict and lazy bytestrings in the code examples.</span>
<a name="line-13"></a><span class='hs-comment'>--</span>
<a name="line-14"></a><span class='hs-comment'>-- &gt; import qualified Data.ByteString      as S</span>
<a name="line-15"></a><span class='hs-comment'>-- &gt; import qualified Data.ByteString.Lazy as L</span>
<a name="line-16"></a><span class='hs-comment'>--</span>
<a name="line-17"></a><span class='hs-comment'>------------------------------------------------------------------------------</span>
<a name="line-18"></a>
<a name="line-19"></a><span class='hs-keyword'>module</span> <span class='hs-conid'>Blaze</span><span class='hs-varop'>.</span><span class='hs-conid'>ByteString</span><span class='hs-varop'>.</span><span class='hs-conid'>Builder</span><span class='hs-varop'>.</span><span class='hs-conid'>ByteString</span>
<a name="line-20"></a>    <span class='hs-layout'>(</span>
<a name="line-21"></a>    <span class='hs-comment'>-- * Strict bytestrings</span>
<a name="line-22"></a>      <span class='hs-varid'>writeByteString</span>
<a name="line-23"></a>    <span class='hs-layout'>,</span> <span class='hs-varid'>fromByteString</span>
<a name="line-24"></a>    <span class='hs-layout'>,</span> <span class='hs-varid'>fromByteStringWith</span>
<a name="line-25"></a>    <span class='hs-layout'>,</span> <span class='hs-varid'>copyByteString</span>
<a name="line-26"></a>    <span class='hs-layout'>,</span> <span class='hs-varid'>insertByteString</span>
<a name="line-27"></a>
<a name="line-28"></a>    <span class='hs-comment'>-- * Lazy bytestrings</span>
<a name="line-29"></a>    <span class='hs-layout'>,</span> <span class='hs-varid'>fromLazyByteString</span>
<a name="line-30"></a>    <span class='hs-layout'>,</span> <span class='hs-varid'>fromLazyByteStringWith</span>
<a name="line-31"></a>    <span class='hs-layout'>,</span> <span class='hs-varid'>copyLazyByteString</span>
<a name="line-32"></a>    <span class='hs-layout'>,</span> <span class='hs-varid'>insertLazyByteString</span>
<a name="line-33"></a>
<a name="line-34"></a>    <span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-35"></a>
<a name="line-36"></a>
<a name="line-37"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Blaze</span><span class='hs-varop'>.</span><span class='hs-conid'>ByteString</span><span class='hs-varop'>.</span><span class='hs-conid'>Builder</span><span class='hs-varop'>.</span><span class='hs-conid'>Internal</span><span class='hs-varop'>.</span><span class='hs-conid'>Write</span> <span class='hs-layout'>(</span> <span class='hs-conid'>Write</span><span class='hs-layout'>,</span> <span class='hs-varid'>exactWrite</span> <span class='hs-layout'>)</span>
<a name="line-38"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Foreign</span>
<a name="line-39"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>ByteString</span><span class='hs-varop'>.</span><span class='hs-conid'>Builder</span>       <span class='hs-keyword'>as</span> <span class='hs-conid'>B</span>
<a name="line-40"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>ByteString</span><span class='hs-varop'>.</span><span class='hs-conid'>Builder</span><span class='hs-varop'>.</span><span class='hs-conid'>Extra</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>B</span>
<a name="line-41"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>ByteString</span>               <span class='hs-keyword'>as</span> <span class='hs-conid'>S</span>
<a name="line-42"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>ByteString</span><span class='hs-varop'>.</span><span class='hs-conid'>Internal</span>      <span class='hs-keyword'>as</span> <span class='hs-conid'>S</span>
<a name="line-43"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>ByteString</span><span class='hs-varop'>.</span><span class='hs-conid'>Lazy</span>          <span class='hs-keyword'>as</span> <span class='hs-conid'>L</span>
<a name="line-44"></a>
<a name="line-45"></a>
<a name="line-46"></a><a name="writeByteString"></a><span class='hs-comment'>-- | Write a strict 'S.ByteString' to a buffer.</span>
<a name="line-47"></a><span class='hs-definition'>writeByteString</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>S</span><span class='hs-varop'>.</span><span class='hs-conid'>ByteString</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Write</span>
<a name="line-48"></a><span class='hs-definition'>writeByteString</span> <span class='hs-varid'>bs</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>exactWrite</span> <span class='hs-varid'>l</span> <span class='hs-varid'>io</span>
<a name="line-49"></a>  <span class='hs-keyword'>where</span>
<a name="line-50"></a>  <span class='hs-layout'>(</span><span class='hs-varid'>fptr</span><span class='hs-layout'>,</span> <span class='hs-varid'>o</span><span class='hs-layout'>,</span> <span class='hs-varid'>l</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>S</span><span class='hs-varop'>.</span><span class='hs-varid'>toForeignPtr</span> <span class='hs-varid'>bs</span>
<a name="line-51"></a>  <span class='hs-varid'>io</span> <span class='hs-varid'>pf</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>withForeignPtr</span> <span class='hs-varid'>fptr</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>p</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>copyBytes</span> <span class='hs-varid'>pf</span> <span class='hs-layout'>(</span><span class='hs-varid'>p</span> <span class='hs-varop'>`plusPtr`</span> <span class='hs-varid'>o</span><span class='hs-layout'>)</span> <span class='hs-varid'>l</span>
<a name="line-52"></a><span class='hs-comment'>{-# INLINE writeByteString #-}</span>
<a name="line-53"></a>
<a name="line-54"></a><a name="fromByteString"></a><span class='hs-comment'>-- | Create a 'B.Builder' denoting the same sequence of bytes as a strict</span>
<a name="line-55"></a><span class='hs-comment'>-- 'S.ByteString'.</span>
<a name="line-56"></a><span class='hs-comment'>-- The 'B.Builder' inserts large 'S.ByteString's directly, but copies small ones</span>
<a name="line-57"></a><span class='hs-comment'>-- to ensure that the generated chunks are large on average.</span>
<a name="line-58"></a><span class='hs-definition'>fromByteString</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>S</span><span class='hs-varop'>.</span><span class='hs-conid'>ByteString</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>B</span><span class='hs-varop'>.</span><span class='hs-conid'>Builder</span>
<a name="line-59"></a><span class='hs-definition'>fromByteString</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>B</span><span class='hs-varop'>.</span><span class='hs-varid'>byteString</span>
<a name="line-60"></a><span class='hs-comment'>{-# INLINE fromByteString #-}</span>
<a name="line-61"></a>
<a name="line-62"></a>
<a name="line-63"></a><a name="fromByteStringWith"></a><span class='hs-comment'>-- | Construct a 'B.Builder' that copies the strict 'S.ByteString's, if it is</span>
<a name="line-64"></a><span class='hs-comment'>-- smaller than the treshold, and inserts it directly otherwise.</span>
<a name="line-65"></a><span class='hs-comment'>--</span>
<a name="line-66"></a><span class='hs-comment'>-- For example, @fromByteStringWith 1024@ copies strict 'S.ByteString's whose size</span>
<a name="line-67"></a><span class='hs-comment'>-- is less or equal to 1kb, and inserts them directly otherwise. This implies</span>
<a name="line-68"></a><span class='hs-comment'>-- that the average chunk-size of the generated lazy 'L.ByteString' may be as</span>
<a name="line-69"></a><span class='hs-comment'>-- low as 513 bytes, as there could always be just a single byte between the</span>
<a name="line-70"></a><span class='hs-comment'>-- directly inserted 1025 byte, strict 'S.ByteString's.</span>
<a name="line-71"></a><span class='hs-comment'>--</span>
<a name="line-72"></a><span class='hs-definition'>fromByteStringWith</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Int</span>          <span class='hs-comment'>-- ^ Maximal number of bytes to copy.</span>
<a name="line-73"></a>                   <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>S</span><span class='hs-varop'>.</span><span class='hs-conid'>ByteString</span> <span class='hs-comment'>-- ^ Strict 'S.ByteString' to serialize.</span>
<a name="line-74"></a>                   <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>B</span><span class='hs-varop'>.</span><span class='hs-conid'>Builder</span>    <span class='hs-comment'>-- ^ Resulting 'B.Builder'.</span>
<a name="line-75"></a><span class='hs-definition'>fromByteStringWith</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>B</span><span class='hs-varop'>.</span><span class='hs-varid'>byteStringThreshold</span>
<a name="line-76"></a><span class='hs-comment'>{-# INLINE fromByteStringWith #-}</span>
<a name="line-77"></a>
<a name="line-78"></a><a name="copyByteString"></a><span class='hs-comment'>-- | Construct a 'B.Builder' that copies the strict 'S.ByteString'.</span>
<a name="line-79"></a><span class='hs-comment'>--</span>
<a name="line-80"></a><span class='hs-comment'>-- Use this function to create 'B.Builder's from smallish (@&lt;= 4kb@)</span>
<a name="line-81"></a><span class='hs-comment'>-- 'S.ByteString's or if you need to guarantee that the 'S.ByteString' is not</span>
<a name="line-82"></a><span class='hs-comment'>-- shared with the chunks generated by the 'B.Builder'.</span>
<a name="line-83"></a><span class='hs-comment'>--</span>
<a name="line-84"></a><span class='hs-definition'>copyByteString</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>S</span><span class='hs-varop'>.</span><span class='hs-conid'>ByteString</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>B</span><span class='hs-varop'>.</span><span class='hs-conid'>Builder</span>
<a name="line-85"></a><span class='hs-definition'>copyByteString</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>B</span><span class='hs-varop'>.</span><span class='hs-varid'>byteStringCopy</span>
<a name="line-86"></a><span class='hs-comment'>{-# INLINE copyByteString #-}</span>
<a name="line-87"></a>
<a name="line-88"></a><a name="insertByteString"></a><span class='hs-comment'>-- | Construct a 'B.Builder' that always inserts the strict 'S.ByteString'</span>
<a name="line-89"></a><span class='hs-comment'>-- directly as a chunk.</span>
<a name="line-90"></a><span class='hs-comment'>--</span>
<a name="line-91"></a><span class='hs-comment'>-- This implies flushing the output buffer, even if it contains just</span>
<a name="line-92"></a><span class='hs-comment'>-- a single byte. You should therefore use 'insertByteString' only for large</span>
<a name="line-93"></a><span class='hs-comment'>-- (@&gt; 8kb@) 'S.ByteString's. Otherwise, the generated chunks are too</span>
<a name="line-94"></a><span class='hs-comment'>-- fragmented to be processed efficiently afterwards.</span>
<a name="line-95"></a><span class='hs-comment'>--</span>
<a name="line-96"></a><span class='hs-definition'>insertByteString</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>S</span><span class='hs-varop'>.</span><span class='hs-conid'>ByteString</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>B</span><span class='hs-varop'>.</span><span class='hs-conid'>Builder</span>
<a name="line-97"></a><span class='hs-definition'>insertByteString</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>B</span><span class='hs-varop'>.</span><span class='hs-varid'>byteStringInsert</span>
<a name="line-98"></a><span class='hs-comment'>{-# INLINE insertByteString #-}</span>
<a name="line-99"></a>
<a name="line-100"></a><a name="fromLazyByteString"></a><span class='hs-comment'>-- | Create a 'B.Builder' denoting the same sequence of bytes as a lazy</span>
<a name="line-101"></a><span class='hs-comment'>-- 'S.ByteString'.</span>
<a name="line-102"></a><span class='hs-comment'>-- The 'B.Builder' inserts large chunks of the lazy 'L.ByteString' directly,</span>
<a name="line-103"></a><span class='hs-comment'>-- but copies small ones to ensure that the generated chunks are large on</span>
<a name="line-104"></a><span class='hs-comment'>-- average.</span>
<a name="line-105"></a><span class='hs-comment'>--</span>
<a name="line-106"></a><span class='hs-definition'>fromLazyByteString</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>L</span><span class='hs-varop'>.</span><span class='hs-conid'>ByteString</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>B</span><span class='hs-varop'>.</span><span class='hs-conid'>Builder</span>
<a name="line-107"></a><span class='hs-definition'>fromLazyByteString</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>B</span><span class='hs-varop'>.</span><span class='hs-varid'>lazyByteString</span>
<a name="line-108"></a><span class='hs-comment'>{-# INLINE fromLazyByteString #-}</span>
<a name="line-109"></a>
<a name="line-110"></a><a name="fromLazyByteStringWith"></a><span class='hs-comment'>-- | Construct a 'B.Builder' that uses the thresholding strategy of 'fromByteStringWith'</span>
<a name="line-111"></a><span class='hs-comment'>-- for each chunk of the lazy 'L.ByteString'.</span>
<a name="line-112"></a><span class='hs-comment'>--</span>
<a name="line-113"></a><span class='hs-definition'>fromLazyByteStringWith</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Int</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>L</span><span class='hs-varop'>.</span><span class='hs-conid'>ByteString</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>B</span><span class='hs-varop'>.</span><span class='hs-conid'>Builder</span>
<a name="line-114"></a><span class='hs-definition'>fromLazyByteStringWith</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>B</span><span class='hs-varop'>.</span><span class='hs-varid'>lazyByteStringThreshold</span>
<a name="line-115"></a><span class='hs-comment'>{-# INLINE fromLazyByteStringWith #-}</span>
<a name="line-116"></a>
<a name="line-117"></a><a name="copyLazyByteString"></a><span class='hs-comment'>-- | Construct a 'B.Builder' that copies the lazy 'L.ByteString'.</span>
<a name="line-118"></a><span class='hs-comment'>--</span>
<a name="line-119"></a><span class='hs-definition'>copyLazyByteString</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>L</span><span class='hs-varop'>.</span><span class='hs-conid'>ByteString</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>B</span><span class='hs-varop'>.</span><span class='hs-conid'>Builder</span>
<a name="line-120"></a><span class='hs-definition'>copyLazyByteString</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>B</span><span class='hs-varop'>.</span><span class='hs-varid'>lazyByteStringCopy</span>
<a name="line-121"></a><span class='hs-comment'>{-# INLINE copyLazyByteString #-}</span>
<a name="line-122"></a>
<a name="line-123"></a><a name="insertLazyByteString"></a><span class='hs-comment'>-- | Construct a 'B.Builder' that inserts all chunks of the lazy 'L.ByteString'</span>
<a name="line-124"></a><span class='hs-comment'>-- directly.</span>
<a name="line-125"></a><span class='hs-comment'>--</span>
<a name="line-126"></a><span class='hs-definition'>insertLazyByteString</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>L</span><span class='hs-varop'>.</span><span class='hs-conid'>ByteString</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>B</span><span class='hs-varop'>.</span><span class='hs-conid'>Builder</span>
<a name="line-127"></a><span class='hs-definition'>insertLazyByteString</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>B</span><span class='hs-varop'>.</span><span class='hs-varid'>lazyByteStringInsert</span>
<a name="line-128"></a><span class='hs-comment'>{-# INLINE insertLazyByteString #-}</span>
</pre></body>
</html>