static void print_info(JFDB *db, JFT_Stem *prefix, JFT *node, JFT_Symbol *stop) { JFT_Stem key = JFT_key(node, db->keyData), val = (JFT_Stem) {}; printf("-----\n"); printf("@ %ld\n", node - db->kmap.map); print_stem("> ", *prefix); print_stem("< ", key); print_node(node); if (JFT_node_type(node) == Leaf) if (key.pre == JFT_SYMBOL_PRIMARY) if (JFDB_get_value(db, node, &val)) print_stem("= ", val); JFT_Cursor cursor = JFT_cursor(node); for (JFT_Keys keys = JFT_keys(&cursor, &key, Forward); JFT_keys_next_until(&keys, stop); ) print_stem(JFT_cursor_at_terminal(&cursor) ? "[val] " : "[sub] ", *keys.stem); }
void init(int numRingsings) //задание изначального расположения колец { for (numRings[1] = 0; numRingsings > 0; numRings[1]++, numRingsings--) stem[1][numRings[1]] = numRingsings; numRings[2] = numRings[3] = 0; numMoves = 0; print_stem(); }
void move(int r1, int r2) //перемещение кольца со стержня r1 на стержень r2 { stem[r2][numRings[r2]++] = stem[r1][--numRings[r1]]; print_stem(); numMoves++; }
static JFT_Status pkey(JFT_Cursor *cursor, JFDB_Slice *slice, JFT_Boolean isTerminal) { if (JFT_leaf(cursor->node).size) print_stem(isTerminal ? "[val] " : "[sub] ", *slice->stem); return Next; }