struct defs

typedefs

global vars

int adj_st5(Direction_st2 d, ChildType_st1 ct);
ChildType_st1 reflect_st6(Direction_st2 d, ChildType_st1 ct);
int CountTree(QuadTree_st3 tree);
QuadTree_st3 child_st7(QuadTree_st3 tree, ChildType_st1 ct);
QuadTree_st3 gtequal_adj_neighbor_st8(QuadTree_st3 tree, Direction_st2 d);
int sum_adjacent_st9(QuadTree_st3 p, ChildType_st1 q1, ChildType_st1 q2, 
                     int size);
int perimeter(QuadTree_st3 tree, int size);
int main(int argc, char *argv[]);
int CheckOutside_st15(int x, int y);
int CheckIntersect_st16(int center_x, int center_y, int size);
QuadTree_st13 MakeTree(int size, int center_x, int center_y, int lo_proc, 
                       int hi_proc, QuadTree_st13 parent, ChildType_st11 ct, 
                       int level);

int adj_st5(
Direction_st2 d, 
ChildType_st1 ct)
{
  local vars

  switch (d1)
  {
    case 0 : 
      {
        temp_151 = (int ) ct1;
        temp_141 = (temp_151 == 1);
        if ((temp_141 == 0))
        {
          /** temp_14 = ((int ) ct == 0) **/
          temp_161 = (int ) ct1;
          temp_142 = (temp_161 == 0);
        }
        return (temp_143);
        temp_18 = (int ) ct;
        temp_17 = (temp_18 == 3);
        if ((temp_17 == 0))
        {
          temp_19 = (int ) ct;
          temp_17 = (temp_19 == 2);
        }
        return (temp_17);
        temp_21 = (int ) ct;
        temp_20 = (temp_21 == 1);
        if ((temp_20 == 0))
        {
          temp_22 = (int ) ct;
          temp_20 = (temp_22 == 3);
        }
        return (temp_20);
        temp_24 = (int ) ct;
        temp_23 = (temp_24 == 2);
        if ((temp_23 == 0))
        {
          temp_25 = (int ) ct;
          temp_23 = (temp_25 == 0);
        }
        return (temp_23);
        break; 
      }
    case 2 : 
      {
        _U_temp_18_11 = (int ) ct1;
        _U_temp_17_01 = (_U_temp_18_11 == 3);
        if ((_U_temp_17_01 == 0))
        {
          /** temp_17 = ((int ) ct == 2) **/
          _U_temp_19_21 = (int ) ct1;
          _U_temp_17_02 = (_U_temp_19_21 == 2);
        }
        return (_U_temp_17_03);
        _U_temp_21_4 = (int ) ct;
        _U_temp_20_3 = (_U_temp_21_4 == 1);
        if ((_U_temp_20_3 == 0))
        {
          _U_temp_22_5 = (int ) ct;
          _U_temp_20_3 = (_U_temp_22_5 == 3);
        }
        return (_U_temp_20_3);
        _U_temp_24_7 = (int ) ct;
        _U_temp_23_6 = (_U_temp_24_7 == 2);
        if ((_U_temp_23_6 == 0))
        {
          _U_temp_25_8 = (int ) ct;
          _U_temp_23_6 = (_U_temp_25_8 == 0);
        }
        return (_U_temp_23_6);
        break; 
      }
    case 1 : 
      {
        _U_temp_21_101 = (int ) ct1;
        _U_temp_20_91 = (_U_temp_21_101 == 1);
        if ((_U_temp_20_91 == 0))
        {
          /** temp_20 = ((int ) ct == 3) **/
          _U_temp_22_111 = (int ) ct1;
          _U_temp_20_92 = (_U_temp_22_111 == 3);
        }
        return (_U_temp_20_93);
        _U_temp_24_13 = (int ) ct;
        _U_temp_23_12 = (_U_temp_24_13 == 2);
        if ((_U_temp_23_12 == 0))
        {
          _U_temp_25_14 = (int ) ct;
          _U_temp_23_12 = (_U_temp_25_14 == 0);
        }
        return (_U_temp_23_12);
        break; 
      }
    case 3 : 
      {
        _U_temp_24_161 = (int ) ct1;
        _U_temp_23_151 = (_U_temp_24_161 == 2);
        if ((_U_temp_23_151 == 0))
        {
          /** temp_23 = ((int ) ct == 0) **/
          _U_temp_25_171 = (int ) ct1;
          _U_temp_23_152 = (_U_temp_25_171 == 0);
        }
        return (_U_temp_23_153);
        break; 
      }
    default : 
      {
        break; 
      }
  }
}

ChildType_st1 reflect_st6(
Direction_st2 d, 
ChildType_st1 ct)
{
  local vars

  temp_271 = (int ) d1;
  temp_261 = (temp_271 == 3);
  if ((temp_261 == 0))
  {
    /** temp_26 = ((int ) d == 1) **/
    temp_281 = (int ) d1;
    temp_262 = (temp_281 == 1);
  }
  if ((temp_263 != 0))
  {
    switch (ct1)
    {
      case 0 : 
        {
          return (1);
          break; 
        }
      case 1 : 
        {
          return (0);
          break; 
        }
      case 3 : 
        {
          return (2);
          break; 
        }
      case 2 : 
        {
          return (3);
          break; 
        }
      default : 
        {
          break; 
        }
    }
  }
  switch (ct1)
  {
    case 0 : 
      {
        return (2);
        break; 
      }
    case 1 : 
      {
        return (3);
        break; 
      }
    case 3 : 
      {
        return (1);
        break; 
      }
    case 2 : 
      {
        return (0);
        break; 
      }
    default : 
      {
        break; 
      }
  }
}

int CountTree(
QuadTree_st3 tree)
{
  local vars

  temp_321 = (*tree1).nw;
  temp_311 = (temp_321 == 0);
  if ((temp_311 != 0))
  {
    /** temp_31 = ((*tree).ne == 0) **/
    temp_331 = (*tree1).ne;
    temp_312 = (temp_331 == 0);
  }
  temp_301 = temp_313;
  if ((temp_301 != 0))
  {
    /** temp_30 = ((*tree).sw == 0) **/
    temp_341 = (*tree1).sw;
    temp_302 = (temp_341 == 0);
  }
  temp_291 = temp_303;
  if ((temp_291 != 0))
  {
    /** temp_29 = ((*tree).se == 0) **/
    temp_351 = (*tree1).se;
    temp_292 = (temp_351 == 0);
  }
  if ((temp_293 != 0))
  {
    return (1);
  }
  else
  {
    /** (((CountTree((*tree).nw) + CountTree((*tree).ne)) + CountTree((*tree).sw)) + CountTree((*tree).se)) **/
    temp_401 = (*tree1).nw;
    temp_392 = CountTree1(temp_401);
    temp_421 = (*tree1).ne;
    temp_412 = CountTree2(temp_421);
    temp_381 = (temp_392 + temp_412);
    temp_441 = (*tree1).sw;
    temp_432 = CountTree3(temp_441);
    temp_371 = (temp_381 + temp_432);
    temp_461 = (*tree1).se;
    temp_452 = CountTree4(temp_461);
    temp_361 = (temp_371 + temp_452);
    return (temp_361);
  }
}

QuadTree_st3 child_st7(
QuadTree_st3 tree, 
ChildType_st1 ct)
{
  local vars

  switch (ct1)
  {
    case 1 : 
      {
        temp_471 = (*tree1).ne;
        return (temp_471);
        temp_48 = (*tree).nw;
        return (temp_48);
        temp_49 = (*tree).se;
        return (temp_49);
        temp_50 = (*tree).sw;
        return (temp_50);
        break; 
      }
    case 0 : 
      {
        _U_temp_48_181 = (*tree1).nw;
        return (_U_temp_48_181);
        _U_temp_49_19 = (*tree).se;
        return (_U_temp_49_19);
        _U_temp_50_20 = (*tree).sw;
        return (_U_temp_50_20);
        break; 
      }
    case 3 : 
      {
        _U_temp_49_211 = (*tree1).se;
        return (_U_temp_49_211);
        _U_temp_50_22 = (*tree).sw;
        return (_U_temp_50_22);
        break; 
      }
    case 2 : 
      {
        _U_temp_50_231 = (*tree1).sw;
        return (_U_temp_50_231);
        break; 
      }
    default : 
      {
        break; 
      }
  }
}

QuadTree_st3 gtequal_adj_neighbor_st8(
QuadTree_st3 tree, 
Direction_st2 d)
{
  local vars

  parent1 = (*tree1).parent;
  temp_511 = (parent1 != 0);
  if ((temp_511 != 0))
  {
    /** temp_51 = (adj_st5(d, (*tree).childtype) != 0) **/
    temp_531 = (*tree1).childtype;
    temp_522 = adj_st51(d1, temp_531);
    temp_512 = (temp_522 != 0);
  }
  if ((temp_513 != 0))
  {
    q2 = gtequal_adj_neighbor_st82(parent1, d1);
  }
  else
  {
    q3 = parent1;
  }
  temp_541 = (q4 != 0);
  if ((temp_541 != 0))
  {
    /** temp_54 = ((int ) (*q).color == 2) **/
    temp_551 = (*q4).color;
    temp_561 = (int ) temp_551;
    temp_542 = (temp_561 == 2);
  }
  if ((temp_543 != 0))
  {
    type1 = (*tree1).childtype;
    temp_582 = reflect_st63(d1, type1);
    temp_572 = child_st74(q4, temp_582);
    return (temp_572);
  }
  else
  {
    return (q4);
  }
}

int sum_adjacent_st9(
QuadTree_st3 p, 
ChildType_st1 q1, 
ChildType_st1 q2, 
int size)
{
  local vars

  temp_591 = (*p1).color;
  temp_601 = (int ) temp_591;
  if ((temp_601 == 2))
  {
    temp_632 = child_st71(p1, q11);
    temp_641 = (size1 / 2);
    temp_622 = sum_adjacent_st92(temp_632, q11, q21, temp_641);
    temp_662 = child_st73(p1, q21);
    temp_671 = (size1 / 2);
    temp_652 = sum_adjacent_st94(temp_662, q11, q21, temp_671);
    temp_611 = (temp_622 + temp_652);
    return (temp_611);
  }
  else
  {
    /** ((int ) (*p).color == 1) **/
    temp_681 = (*p1).color;
    temp_691 = (int ) temp_681;
    if ((temp_691 == 1))
    {
      return (size1);
    }
    else
    {
      return (0);
    }
  }
}

int perimeter(
QuadTree_st3 tree, 
int size)
{
  local vars

  retval1 = 0;
  temp_701 = (*tree1).color;
  temp_711 = (int ) temp_701;
  if ((temp_711 == 2))
  {
    temp_731 = (*tree1).sw;
    temp_741 = (size1 / 2);
    temp_722 = perimeter1(temp_731, temp_741);
    retval2 = (retval1 + temp_722);
    temp_761 = (*tree1).se;
    temp_771 = (size1 / 2);
    temp_752 = perimeter2(temp_761, temp_771);
    retval3 = (retval2 + temp_752);
    temp_791 = (*tree1).ne;
    temp_801 = (size1 / 2);
    temp_782 = perimeter3(temp_791, temp_801);
    retval4 = (retval3 + temp_782);
    temp_821 = (*tree1).nw;
    temp_831 = (size1 / 2);
    temp_812 = perimeter4(temp_821, temp_831);
    retval5 = (retval4 + temp_812);
  }
  else
  {
    /** ((int ) (*tree).color == 0) **/
    temp_841 = (*tree1).color;
    temp_851 = (int ) temp_841;
    if ((temp_851 == 0))
    {
      neighbor2 = gtequal_adj_neighbor_st85(tree1, 0);
      temp_861 = (neighbor2 == 0);
      if ((temp_861 == 0))
      {
        /** temp_86 = ((int ) (*neighbor).color == 1) **/
        temp_871 = (*neighbor2).color;
        temp_881 = (int ) temp_871;
        temp_862 = (temp_881 == 1);
      }
      if ((temp_863 != 0))
      {
        retval6 = (retval1 + size1);
      }
      else
      {
        /** ((int ) (*neighbor).color == 2) **/
        temp_891 = (*neighbor2).color;
        temp_901 = (int ) temp_891;
        if ((temp_901 == 2))
        {
          /** retval = (retval + sum_adjacent_st9(neighbor, 3, 2, size)) **/
          temp_912 = sum_adjacent_st96(neighbor2, 3, 2, size1);
          retval7 = (retval1 + temp_912);
        }
      }
      neighbor4 = gtequal_adj_neighbor_st87(tree1, 1);
      temp_921 = (neighbor4 == 0);
      if ((temp_921 == 0))
      {
        /** temp_92 = ((int ) (*neighbor).color == 1) **/
        temp_931 = (*neighbor4).color;
        temp_941 = (int ) temp_931;
        temp_922 = (temp_941 == 1);
      }
      if ((temp_923 != 0))
      {
        retval10 = (retval9 + size1);
      }
      else
      {
        /** ((int ) (*neighbor).color == 2) **/
        temp_951 = (*neighbor4).color;
        temp_961 = (int ) temp_951;
        if ((temp_961 == 2))
        {
          /** retval = (retval + sum_adjacent_st9(neighbor, 2, 0, size)) **/
          temp_972 = sum_adjacent_st98(neighbor4, 2, 0, size1);
          retval11 = (retval9 + temp_972);
        }
      }
      neighbor6 = gtequal_adj_neighbor_st89(tree1, 2);
      temp_981 = (neighbor6 == 0);
      if ((temp_981 == 0))
      {
        /** temp_98 = ((int ) (*neighbor).color == 1) **/
        temp_991 = (*neighbor6).color;
        temp_1001 = (int ) temp_991;
        temp_982 = (temp_1001 == 1);
      }
      if ((temp_983 != 0))
      {
        retval14 = (retval13 + size1);
      }
      else
      {
        /** ((int ) (*neighbor).color == 2) **/
        temp_1011 = (*neighbor6).color;
        temp_1021 = (int ) temp_1011;
        if ((temp_1021 == 2))
        {
          /** retval = (retval + sum_adjacent_st9(neighbor, 0, 1, size)) **/
          temp_1032 = sum_adjacent_st910(neighbor6, 0, 1, size1);
          retval15 = (retval13 + temp_1032);
        }
      }
      neighbor8 = gtequal_adj_neighbor_st811(tree1, 3);
      temp_1041 = (neighbor8 == 0);
      if ((temp_1041 == 0))
      {
        /** temp_104 = ((int ) (*neighbor).color == 1) **/
        temp_1051 = (*neighbor8).color;
        temp_1061 = (int ) temp_1051;
        temp_1042 = (temp_1061 == 1);
      }
      if ((temp_1043 != 0))
      {
        retval18 = (retval17 + size1);
      }
      else
      {
        /** ((int ) (*neighbor).color == 2) **/
        temp_1071 = (*neighbor8).color;
        temp_1081 = (int ) temp_1071;
        if ((temp_1081 == 2))
        {
          /** retval = (retval + sum_adjacent_st9(neighbor, 1, 3, size)) **/
          temp_1092 = sum_adjacent_st912(neighbor8, 1, 3, size1);
          retval19 = (retval17 + temp_1092);
        }
      }
    }
  }
  return (retval23);
}

int main(
int argc, 
char *argv[])
{
  local vars

  tree2 = MakeTree1(2048, 0, 0, 0, 0, 0, 3, 11);
  count2 = CountTree2(tree2);
  temp_1101 = "# of leaves is %d\n";
  printf(temp_1101, count2);
  count4 = perimeter3(tree2, 4096);
  temp_1111 = "perimeter is %d\n";
  printf(temp_1111, count4);
}

int CheckOutside_st15(
int x, 
int y)
{
  local vars

  temp_1121 = (x1 * x1);
  temp_1131 = (y1 * y1);
  euclid1 = (temp_1121 + temp_1131);
  if ((euclid1 > 4194304))
  {
    return (1);
  }
  if ((euclid1 <= 1048575))
  {
    return (-1);
  }
  return (0);
}

int CheckIntersect_st16(
int center_x, 
int center_y, 
int size)
{
  local vars

  temp_1181 = (center_x1 + size1);
  temp_1191 = (center_y1 + size1);
  temp_1172 = CheckOutside_st151(temp_1181, temp_1191);
  temp_1161 = (temp_1172 == 0);
  if ((temp_1161 != 0))
  {
    /** temp_116 = (CheckOutside_st15((center_x + size), (center_y - size)) == 0) **/
    temp_1211 = (center_x1 + size1);
    temp_1221 = (center_y1 - size1);
    temp_1202 = CheckOutside_st152(temp_1211, temp_1221);
    temp_1162 = (temp_1202 == 0);
  }
  temp_1151 = temp_1163;
  if ((temp_1151 != 0))
  {
    /** temp_115 = (CheckOutside_st15((center_x - size), (center_y - size)) == 0) **/
    temp_1241 = (center_x1 - size1);
    temp_1251 = (center_y1 - size1);
    temp_1232 = CheckOutside_st153(temp_1241, temp_1251);
    temp_1152 = (temp_1232 == 0);
  }
  temp_1141 = temp_1153;
  if ((temp_1141 != 0))
  {
    /** temp_114 = (CheckOutside_st15((center_x - size), (center_y + size)) == 0) **/
    temp_1271 = (center_x1 - size1);
    temp_1281 = (center_y1 + size1);
    temp_1262 = CheckOutside_st154(temp_1271, temp_1281);
    temp_1142 = (temp_1262 == 0);
  }
  if ((temp_1143 != 0))
  {
    return (2);
  }
  temp_1321 = (center_x1 + size1);
  temp_1331 = (center_y1 + size1);
  temp_1312 = CheckOutside_st155(temp_1321, temp_1331);
  temp_1351 = (center_x1 + size1);
  temp_1361 = (center_y1 - size1);
  temp_1342 = CheckOutside_st156(temp_1351, temp_1361);
  temp_1301 = (temp_1312 + temp_1342);
  temp_1381 = (center_x1 - size1);
  temp_1391 = (center_y1 - size1);
  temp_1372 = CheckOutside_st157(temp_1381, temp_1391);
  temp_1291 = (temp_1301 + temp_1372);
  temp_1411 = (center_x1 - size1);
  temp_1421 = (center_y1 + size1);
  temp_1402 = CheckOutside_st158(temp_1411, temp_1421);
  sum1 = (temp_1291 + temp_1402);
  temp_1431 = (sum1 == 4);
  if ((temp_1431 == 0))
  {
    temp_1432 = (sum1 == -4);
  }
  if ((temp_1433 != 0))
  {
    return (0);
  }
  return (1);
}

QuadTree_st13 MakeTree(
int size, 
int center_x, 
int center_y, 
int lo_proc, 
int hi_proc, 
QuadTree_st13 parent, 
ChildType_st11 ct, 
int level)
{
  local vars

  intersect1 = 0;
  temp_1442 = malloc(28);
  retval1 = (struct quad_struct *) temp_1442;
  (*retval1).parent = parent1;
  (*retval1).childtype = ct1;
  intersect3 = CheckIntersect_st161(center_x1, center_y1, size1);
  size1 = (size1 / 2);
  temp_1451 = (intersect3 == 0);
  if ((temp_1451 != 0))
  {
    temp_1452 = (size1 <= 511);
  }
  if ((temp_1453 != 0))
  {
    (*retval1).color = 1;
    (*retval1).nw = 0;
    (*retval1).ne = 0;
    (*retval1).sw = 0;
    (*retval1).se = 0;
  }
  else
  {
    if ((intersect3 == 2))
    {
      (*retval1).color = 0;
      (*retval1).nw = 0;
      (*retval1).ne = 0;
      (*retval1).sw = 0;
      (*retval1).se = 0;
    }
    else
    {
      if ((level1 == 0))
      {
        (*retval1).color = 0;
        (*retval1).nw = 0;
        (*retval1).ne = 0;
        (*retval1).sw = 0;
        (*retval1).se = 0;
      }
      else
      {
        temp_1461 = (lo_proc1 + hi_proc1);
        mid11 = (temp_1461 / 2);
        temp_1481 = (lo_proc1 + hi_proc1);
        temp_1471 = (temp_1481 + 1);
        mid21 = (temp_1471 / 2);
        temp_1491 = (center_x1 - size1);
        temp_1501 = (center_y1 + size1);
        temp_1521 = (lo_proc1 + mid11);
        temp_1511 = (temp_1521 / 2);
        temp_1531 = (level1 - 1);
        (*retval1).nw = MakeTree2(size1, temp_1491, temp_1501, lo_proc1, temp_1511, retval1, 0, temp_1531);
        temp_1541 = (center_x1 + size1);
        temp_1551 = (center_y1 + size1);
        temp_1581 = (lo_proc1 + mid11);
        temp_1571 = (temp_1581 + 1);
        temp_1561 = (temp_1571 / 2);
        temp_1591 = (level1 - 1);
        (*retval1).ne = MakeTree3(size1, temp_1541, temp_1551, temp_1561, mid11, retval1, 1, temp_1591);
        temp_1601 = (center_x1 + size1);
        temp_1611 = (center_y1 - size1);
        temp_1631 = (mid21 + hi_proc1);
        temp_1621 = (temp_1631 / 2);
        temp_1641 = (level1 - 1);
        (*retval1).se = MakeTree4(size1, temp_1601, temp_1611, mid21, temp_1621, retval1, 3, temp_1641);
        temp_1651 = (center_x1 - size1);
        temp_1661 = (center_y1 - size1);
        temp_1691 = (mid21 + hi_proc1);
        temp_1681 = (temp_1691 + 1);
        temp_1671 = (temp_1681 / 2);
        temp_1701 = (level1 - 1);
        (*retval1).sw = MakeTree5(size1, temp_1651, temp_1661, temp_1671, hi_proc1, retval1, 2, temp_1701);
        (*retval1).color = 2;
      }
    }
  }
  return (retval1);
}