bintree_findfirst.c 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. /*********************** -*- Mode: C -*- ***********************
  2. * File : bintree_findfirst.c
  3. *---------------------------------------------------------------
  4. * Description
  5. * ===========
  6. * This operation returns the first "clientnode" present in the specified "tree"
  7. *
  8. * tree - the "tree" instance to invoke this operation upon
  9. *
  10. * RETURNS
  11. * "clientnode" instance or NULL if no nodes are present in this view.
  12. *
  13. *---------------------------------------------------------------
  14. * Author : Graeme McKerrell
  15. * Created On : Wed Jan 28 10:15:00 2004
  16. * Status : TESTED
  17. *---------------------------------------------------------------
  18. * HISTORY
  19. * 7-Dec-2004 Graeme McKerrell
  20. * Renamed to the "lub_" namespace
  21. * 5-May-2004 Graeme McKerrell
  22. * updates following review
  23. * 2-Mar-2004 Graeme McKerrell
  24. * fixed comparison logic
  25. * 9-Feb-2004 Graeme McKerrell
  26. * update to use new getkey prototype, removed the now spurious
  27. * nullgetkey() function
  28. * 28-Jan-2004 Graeme McKerrell
  29. * Initial version
  30. *---------------------------------------------------------------
  31. * Copyright (C) 2004 3Com Corporation. All Rights Reserved.
  32. **************************************************************** */
  33. #include "private.h"
  34. /* forward declare these functions */
  35. static lub_bintree_compare_fn compareleft;
  36. /*--------------------------------------------------------- */
  37. void *
  38. lub_bintree_findfirst(lub_bintree_t *this)
  39. {
  40. lub_bintree_compare_fn *client_compare = this->compareFn;
  41. /*
  42. * put dummy functions in place
  43. * This will make the search faster and direct it to the left most
  44. * node
  45. */
  46. this->compareFn = compareleft;
  47. /*
  48. * the key doesn't matter here cos we've cobbled the compare function
  49. */
  50. this->root = lub_bintree_splay(this,this->root,NULL);
  51. /* restore the client functions */
  52. this->compareFn = client_compare;
  53. if(NULL == this->root)
  54. return NULL;
  55. else
  56. return lub_bintree_getclientnode(this,this->root);
  57. }
  58. /*--------------------------------------------------------- */
  59. /*
  60. * This comparison operation always returns 1 hence will force a
  61. * search to the left most node.
  62. *
  63. * clientnode - node to compare (not used)
  64. * clientkey - key to compare (not used)
  65. */
  66. static int
  67. compareleft(const void *clientnode,
  68. const void *clientkey)
  69. {
  70. clientnode = clientnode;
  71. clientkey = clientkey;
  72. return 1;
  73. }
  74. /*--------------------------------------------------------- */