Main Page | Class Hierarchy | Class List | File List | Class Members | File Members

ttri.c

Go to the documentation of this file.
00001 /*++ 00002 00003 Copyright (c) 1989 Microsoft Corporation 00004 00005 Module Name: 00006 00007 tsplay.c 00008 00009 Abstract: 00010 00011 Test program for the Splay Procedures 00012 00013 Author: 00014 00015 Gary Kimura [GaryKi] 24-May-1989 00016 00017 Revision History: 00018 00019 --*/ 00020 00021 #define DbgPrint DbgPrint 00022 00023 #include <stdio.h> 00024 00025 #include "nt.h" 00026 #include "ntrtl.h" 00027 #include "triangle.h" 00028 00029 ULONG RtlRandom (IN OUT PULONG Seed); 00030 00031 typedef struct _TREE_NODE { 00032 CLONG Data; 00033 TRI_SPLAY_LINKS Links; 00034 } TREE_NODE; 00035 typedef TREE_NODE *PTREE_NODE; 00036 00037 TREE_NODE Buffer[2048]; 00038 00039 PTREE_NODE 00040 TreeInsert ( 00041 IN PTREE_NODE Root, 00042 IN PTREE_NODE Node 00043 ); 00044 00045 VOID 00046 PrintTree ( 00047 IN PTREE_NODE Node 00048 ); 00049 00050 int 00051 _CDECL 00052 main( 00053 int argc, 00054 char *argv[] 00055 ) 00056 { 00057 PTREE_NODE Root; 00058 ULONG i; 00059 ULONG Seed; 00060 00061 DbgPrint("Start TriangleTest()\n"); 00062 00063 Root = NULL; 00064 Seed = 0; 00065 for (i=0; i<2048; i++) { 00066 Buffer[i].Data = RtlRandom(&Seed); 00067 Buffer[i].Data = Buffer[i].Data % 512; 00068 TriInitializeSplayLinks(&Buffer[i].Links); 00069 Root = TreeInsert(Root, &Buffer[i]); 00070 } 00071 00072 PrintTree(Root); 00073 00074 DbgPrint("End TriangleTest()\n"); 00075 00076 return TRUE; 00077 00078 } 00079 00080 PTREE_NODE 00081 TreeInsert ( 00082 IN PTREE_NODE Root, 00083 IN PTREE_NODE Node 00084 ) 00085 00086 { 00087 PTRI_SPLAY_LINKS Temp; 00088 00089 if (Root == NULL) { 00090 00091 //DbgPrint("Add as root %u\n", Node->Data); 00092 return Node; 00093 00094 } 00095 00096 while (TRUE) { 00097 00098 if (Root->Data == Node->Data) { 00099 00100 //DbgPrint("Delete %u\n", Node->Data); 00101 00102 Temp = TriDelete(&Root->Links); 00103 if (Temp == NULL) { 00104 return NULL; 00105 } else { 00106 return CONTAINING_RECORD(Temp, TREE_NODE, Links); 00107 } 00108 00109 } 00110 00111 if (Root->Data < Node->Data) { 00112 00113 // 00114 // Go right 00115 // 00116 00117 if (TriRightChild(&Root->Links) == NULL) { 00118 00119 //DbgPrint("Add as right child %u\n", Node->Data); 00120 TriInsertAsRightChild(&Root->Links, &Node->Links); 00121 return CONTAINING_RECORD(TriSplay(&Node->Links), TREE_NODE, Links); 00122 00123 } else { 00124 00125 Root = CONTAINING_RECORD(TriRightChild(&Root->Links), TREE_NODE, Links); 00126 00127 } 00128 00129 } else { 00130 00131 // 00132 // Go Left 00133 // 00134 00135 if (TriLeftChild(&Root->Links) == NULL) { 00136 00137 //DbgPrint("Add as left child %u\n", Node->Data); 00138 TriInsertAsLeftChild(&Root->Links, &Node->Links); 00139 return CONTAINING_RECORD(TriSplay(&Node->Links), TREE_NODE, Links); 00140 00141 } else { 00142 00143 Root = CONTAINING_RECORD(TriLeftChild(&Root->Links), TREE_NODE, Links); 00144 00145 } 00146 00147 } 00148 } 00149 } 00150 00151 VOID 00152 PrintTree ( 00153 IN PTREE_NODE Node 00154 ) 00155 00156 { 00157 PTRI_SPLAY_LINKS Temp; 00158 ULONG LastValue; 00159 00160 if (Node == NULL) { 00161 return; 00162 } 00163 00164 // 00165 // find smallest value 00166 // 00167 00168 while (TriLeftChild(&Node->Links) != NULL) { 00169 Node = CONTAINING_RECORD(TriLeftChild(&Node->Links), TREE_NODE, Links); 00170 } 00171 LastValue = Node->Data; 00172 //DbgPrint("%u\n", Node->Data); 00173 00174 // 00175 // while the is a real successor we print the successor value 00176 // 00177 00178 while ((Temp = TriRealSuccessor(&Node->Links)) != NULL) { 00179 Node = CONTAINING_RECORD(Temp, TREE_NODE, Links); 00180 if (LastValue >= Node->Data) { 00181 DbgPrint("TestSplay Error\n"); 00182 } 00183 LastValue = Node->Data; 00184 //DbgPrint("%u\n", Node->Data); 00185 } 00186 00187 }

Generated on Sat May 15 19:42:09 2004 for test by doxygen 1.3.7