From 8f2f7093d19e8a20a451aab2d6b9524eb4ace487 Mon Sep 17 00:00:00 2001 From: Eric Smith Date: Fri, 7 Mar 2003 11:35:36 +0000 Subject: [PATCH] more work on pdf_add_tree_element(). --- pdf_name_tree.c | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/pdf_name_tree.c b/pdf_name_tree.c index 4a39bc2..5d2d600 100644 --- a/pdf_name_tree.c +++ b/pdf_name_tree.c @@ -4,7 +4,7 @@ * will be compressed using ITU-T T.6 (G4) fax encoding. * * PDF routines - * $Id: pdf_name_tree.c,v 1.2 2003/03/07 03:28:45 eric Exp $ + * $Id: pdf_name_tree.c,v 1.3 2003/03/07 03:35:36 eric Exp $ * Copyright 2003 Eric Smith * * This program is free software; you can redistribute it and/or modify @@ -112,6 +112,8 @@ static void pdf_split_name_tree_node (struct pdf_name_tree *tree, new_node = pdf_calloc (1, sizeof (struct pdf_name_tree_node)); new_node->parent = node->parent; new_node->leaf = node->leaf; + + /* $$$ insert new node in parent's kids array */ } @@ -140,7 +142,26 @@ static void pdf_add_tree_element (struct pdf_name_tree *tree, return; } - /* $$$ figure out in which slot to insert it */ + /* figure out in which slot to insert it */ + for (i = 0; i < node->count; i++) + if (pdf_compare_obj (key, node->keys [i] < 0)) + break; + + /* move other entries right one position */ + if (i != node->count) + { + memmove (& node->keys [i+1], + & node->keys [i], + (node->count - i) * sizeof (struct pdf_obj *)); + memmove (& node->values [i+1], + & node->values [i], + (node->count - i) * sizeof (struct pdf_obj *)); + } + + node->keys [i] = key; + node->values [i] = val; + + node->count++; /* update limits, recursing upwards if necessary */ if (i == 0) @@ -161,7 +182,6 @@ static void pdf_add_tree_element (struct pdf_name_tree *tree, node->max_key = key; } } - }