Lines Matching defs:pz
25 * write a buffer to a pz stream
32 pzwrite(register Pz_t* pz, Sfio_t* op, const void* buf, size_t n)
47 if (!(pz->flags & PZ_WRITE))
49 if (pz->disc->errorf)
50 (*pz->disc->errorf)(pz, pz->disc, 2, "%s: cannot deflate -- not open for write", pz->path);
55 if (pzheadwrite(pz, op))
57 if (pz->flags & PZ_NOPZIP)
61 if (pz->disc->errorf)
62 (*pz->disc->errorf)(pz, pz->disc, 2, "%s: write error", pz->path);
67 pp = pz->part;
68 if (pz->flags & PZ_SORT)
70 pz->ws.bp = pz->buf;
71 if (!pz->sort.order)
74 pz->sort.freedisc.link = offsetof(Pzelt_t, link);
75 pz->sort.orderdisc.link = offsetof(Pzelt_t, link);
76 pz->sort.orderdisc.key = offsetof(Pzelt_t, buf);
77 pz->sort.orderdisc.size = pp->row;
78 if (!(elt = (Pzelt_t*)vmnewof(pz->vm, 0, char, pp->col * k, 0)) || !(pz->sort.order = dtnew(pz->vm, &pz->sort.orderdisc, Dtobag)) || !(pz->sort.free = dtnew(pz->vm, &pz->sort.freedisc, Dtlist)))
79 return pznospace(pz);
82 dtinsert(pz->sort.free, elt);
88 if (pz->ws.sz)
90 x = pz->ws.sz;
93 memcpy(pz->ws.sp, bp, x);
96 if (pz->ws.sz -= x)
97 pz->ws.sp += x;
99 dtinsert(pz->sort.order, pz->ws.se);
104 while (!(elt = (Pzelt_t*)dtfirst(pz->sort.free)))
105 if (pzsync(pz))
107 dtdelete(pz->sort.free, elt);
111 pz->ws.sp = elt->buf + k;
112 pz->ws.sz = x - k;
113 pz->ws.se = elt;
117 dtinsert(pz->sort.order, elt);
123 if (pz->ws.pc || n < pp->row)
125 if (!pz->ws.pb && !(pz->ws.pb = vmnewof(pz->vm, 0, unsigned char, pp->row, 0)))
127 x = pp->row - pz->ws.pc;
130 memcpy(pz->ws.pb + pz->ws.pc, buf, x);
131 if ((pz->ws.pc += x) < pp->row)
133 pz->ws.pc = 0;
134 if (pzwrite(pz, op, pz->ws.pb, pp->row) != pp->row)
145 if (!pz->ws.pb && !(pz->ws.pb = vmnewof(pz->vm, 0, unsigned char, pp->row, 0)))
150 memcpy(pz->ws.pb + pz->ws.pc, be, k);
151 pz->ws.pc += k;
153 pat = pz->pat;
154 tmp = pz->tmp;
158 if (!pz->ws.bp)
164 pz->ws.io = op;
169 pz->ws.ve = (pz->ws.vp = pz->val) + pp->loq - 2 * pp->row;
170 memcpy(pz->ws.vp, pat, pp->row);
171 pz->ws.vp += pp->row;
172 pz->ws.bp = pz->buf;
174 *pz->ws.bp++ = pat[pp->map[j]];
175 pz->ws.rep = pz->ws.row = 1;
180 * and encode the lo frequency rows in tmp+pz->val
184 k = pz->ws.row + (be - bp) / pp->row;
187 while (pz->ws.row < k)
192 if (pz->ws.vp >= pz->ws.ve)
194 sfputu(tmp, pz->ws.rep);
196 *pz->ws.vp++ = pat[j] = bp[j];
197 pz->ws.rep = 0;
202 *pz->ws.vp++ = pat[j] = bp[j];
208 *pz->ws.bp++ = bp[pp->map[j]];
209 pz->ws.rep++;
210 pz->ws.row++;
216 if (pzsync(pz))