RtlGetElementGenericTableAvl

VOID *__stdcall RtlGetElementGenericTableAvl(_RTL_AVL_TABLE *Table, UINT64 I){
  unsigned int WhichOrderedElement; 
  unsigned int v3; 
  _RTL_AVL_TABLE *v4; 
  unsigned int NumberGenericTableElements; 
  _RTL_BALANCED_LINKS *OrderedPointer; 
  _RTL_BALANCED_LINKS *i; 
  int v9; 
  _RTL_BALANCED_LINKS *k; 
  int v11; 
  unsigned int v12; 
  int v13; 
  _RTL_BALANCED_LINKS *j; 
  int v15; 

  WhichOrderedElement = Table->WhichOrderedElement;
  v3 = I;
  v4 = Table;
  if( (_DWORD)I == -1 )
    return 0i64;
  NumberGenericTableElements = Table->NumberGenericTableElements;
  if( v3 + 1 > NumberGenericTableElements )
    return 0i64;
  OrderedPointer = (_RTL_BALANCED_LINKS *)Table->OrderedPointer;
  if( !OrderedPointer )
  {
    OrderedPointer = v4->BalancedRoot.RightChild;
    for( i = OrderedPointer->LeftChild; i; i = i->LeftChild )
      OrderedPointer = i;
    WhichOrderedElement = 0;
    v4->OrderedPointer = OrderedPointer;
    v4->WhichOrderedElement = 0;
  }
  if( v3 != WhichOrderedElement )
  {
    if( v3 >= WhichOrderedElement )
    {
      v12 = NumberGenericTableElements - v3;
      if( v3 - WhichOrderedElement > v12 )
      {
        OrderedPointer = v4->BalancedRoot.RightChild;
        for( j = OrderedPointer->RightChild; j; j = j->RightChild )
          OrderedPointer = j;
        if( v12 != 1 )
        {
          do
            OrderedPointer = RealPredecessor(OrderedPointer);
          while( v15 != 1 );
        }
      }
      else if( v3 != WhichOrderedElement )
      {
        do
          OrderedPointer = RealSuccessor(OrderedPointer);
        while( v13 != 1 );
      }
    }
    else if( v3 < WhichOrderedElement >> 1 )
    {
      OrderedPointer = v4->BalancedRoot.RightChild;
      for( k = OrderedPointer->LeftChild; k; k = k->LeftChild )
        OrderedPointer = k;
      if( v3 )
      {
        do
          OrderedPointer = RealSuccessor(OrderedPointer);
        while( v11 != 1 );
      }
    }
    else if( WhichOrderedElement != v3 )
    {
      do
        OrderedPointer = RealPredecessor(OrderedPointer);
      while( v9 != 1 );
    }
    v4->OrderedPointer = OrderedPointer;
    v4->WhichOrderedElement = v3;
  }
  return &OrderedPointer[1];
}

Referenced by:

No references.