int traverse(DictIndex0Item item, int type, List itemsList) { int result = 0; Iterator i = item.childrenItemMap.values().iterator(); DictIndex0Item child; boolean firstChild = true; int childrenNum = item.childrenItemMap.size(); int pathNum; while (i.hasNext()) { child = (DictIndex0Item) i.next(); switch (type) { case GET_CHILDREN_NUM: result = childrenNum; break; case GET_OFFSET: offset_ += 8; child.index0Offset = offset_; break; case GET_1STCLD_OFFSET: if (firstChild) { item.firstChildIndex0Offset = child.index0Offset; firstChild = false; } break; case GET_PATH_NUM: break; case GET_LIST: itemsList.add(child); break; case REMOVE_SMALLITEMS: pathNum = traverse(child, GET_PATH_NUM, itemsList); if (pathNum <= minwords) { child.childrenSize = pathNum; child.removeChildren(); } break; case PRINT: print(child); } } i = item.childrenItemMap.values().iterator(); while (i.hasNext()) { deep++; child = (DictIndex0Item) i.next(); result += traverse(child, type, itemsList); } if (item.childrenItemMap.size() == 0 && type == GET_PATH_NUM) result = 1; deep--; return result; }