Lines Matching refs:nodes
246 /* REQUIRES: cost < kInfinity, nodes[start_pos].cost < kInfinity */
248 static BROTLI_INLINE void UpdateZopfliNode(ZopfliNode* nodes, size_t pos,
251 ZopfliNode* next = &nodes[pos + len];
303 const ZopfliNode* nodes,
311 while (pos + len <= num_bytes && nodes[pos + len].u.cost <= min_cost) {
327 /* REQUIRES: nodes[pos].cost < kInfinity
328 REQUIRES: nodes[0..pos] satisfies that "ZopfliNode array invariant". */
333 const ZopfliNode* nodes) {
334 const size_t clen = ZopfliNodeCopyLength(&nodes[pos]);
335 const size_t ilen = nodes[pos].dcode_insert_length & 0x7FFFFFF;
336 const size_t dist = ZopfliNodeCopyDistance(&nodes[pos]);
346 ZopfliNodeDistanceCode(&nodes[pos]) > 0) {
349 return nodes[pos - clen - ilen].u.shortcut;
356 nodes[0..pos]. The last four distances at block_start are in
358 REQUIRES: nodes[pos].cost < kInfinity
359 REQUIRES: nodes[0..pos] satisfies that "ZopfliNode array invariant". */
362 const ZopfliNode* nodes,
365 size_t p = nodes[pos].u.shortcut;
367 const size_t ilen = nodes[p].dcode_insert_length & 0x7FFFFFF;
368 const size_t clen = ZopfliNodeCopyLength(&nodes[p]);
369 const size_t dist = ZopfliNodeCopyDistance(&nodes[p]);
372 p = nodes[p - clen - ilen].u.shortcut;
384 const ZopfliCostModel* model, StartPosQueue* queue, ZopfliNode* nodes) {
386 float node_cost = nodes[pos].u.cost;
387 nodes[pos].u.shortcut = ComputeDistanceShortcut(
388 block_start, pos, max_backward_limit, gap, nodes);
396 pos, starting_dist_cache, nodes, posdata.distance_cache);
408 StartPosQueue* queue, ZopfliNode* nodes) {
424 starting_dist_cache, model, queue, nodes);
430 min_len = ComputeMinimumCopyLength(min_cost, nodes, num_bytes, pos);
491 if (cost < nodes[pos + l].u.cost) {
492 UpdateZopfliNode(nodes, pos, start, l, l, backward, j + 1, cost);
543 if (cost < nodes[pos + len].u.cost) {
544 UpdateZopfliNode(nodes, pos, start, len, len_code, dist, 0, cost);
555 ZopfliNode* nodes) {
558 while ((nodes[index].dcode_insert_length & 0x7FFFFFF) == 0 &&
559 nodes[index].length == 1) --index;
560 nodes[index].u.next = BROTLI_UINT32_MAX;
562 size_t len = ZopfliNodeCommandLength(&nodes[index]);
564 nodes[index].u.next = (uint32_t)len;
570 /* REQUIRES: nodes != NULL and len(nodes) >= num_bytes + 1 */
572 const size_t block_start, const ZopfliNode* nodes, int* dist_cache,
578 uint32_t offset = nodes[0].u.next;
582 const ZopfliNode* next = &nodes[pos + offset];
620 const BackwardMatch* matches, ZopfliNode* nodes) {
627 nodes[0].length = 0;
628 nodes[0].u.cost = 0;
633 num_matches[i], &matches[cur_match_pos], model, &queue, nodes);
647 dist_cache, model, &queue, nodes);
653 return ComputeShortestPathFromNodes(num_bytes, nodes);
656 /* REQUIRES: nodes != NULL and len(nodes) >= num_bytes + 1 */
660 const int* dist_cache, Hasher* hasher, ZopfliNode* nodes) {
673 nodes[0].length = 0;
674 nodes[0].u.cost = 0;
698 &queue, nodes);
713 dist_cache, &model, &queue, nodes);
719 return ComputeShortestPathFromNodes(num_bytes, nodes);
727 ZopfliNode* nodes = BROTLI_ALLOC(m, ZopfliNode, num_bytes + 1);
728 if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(nodes)) return;
729 BrotliInitZopfliNodes(nodes, num_bytes + 1);
732 dist_cache, hasher, nodes);
734 BrotliZopfliCreateCommands(num_bytes, position, nodes, dist_cache,
736 BROTLI_FREE(m, nodes);
757 ZopfliNode* nodes;
811 nodes = BROTLI_ALLOC(m, ZopfliNode, num_bytes + 1);
812 if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(nodes)) return;
816 BrotliInitZopfliNodes(nodes, num_bytes + 1);
831 nodes);
832 BrotliZopfliCreateCommands(num_bytes, position, nodes, dist_cache,
836 BROTLI_FREE(m, nodes);