//private functions below //http://faculty.cs.niu.edu/~freedman/340/340notes/340treap.htm treap::node* treap::_erase(int val, node* pos) { if (pos == nullptr) { //element does not exist return nullptr; } if (pos->val == val) { node* ret = nullptr; while (pos->left != nullptr || pos->right != nullptr) { //loop until we are a leaf node int val_left = INT_MAX, val_right = INT_MAX; if (pos->left != nullptr) { val_left = pos->left->rnd; } if (pos->right != nullptr) { val_right = pos->right->rnd; } if (val_left < val_right) { node* tmp = pos->rotR(); if (ret != nullptr) { //only capture the first one ret = tmp; } } else { node* tmp = pos->rotL(); if (ret != nullptr) { ret = tmp; } } } return ret; } else if (val < pos->val) { pos->left = _erase(val, pos->left); if (pos->left != nullptr && pos->rnd > pos->left->rnd) { return pos->rotR(); } else { return pos; } } else { pos->right = _erase(val, pos->right); if (pos->right != nullptr && pos->rnd > pos->right->rnd) { return pos->rotL(); } else { return pos; } } }
int main(int argc, char **argv) { if (!g_thread_supported()) g_thread_init(NULL); g_set_prgname(argv[0]); g_log_set_default_handler(logger_stderr, NULL); logger_init_level(GRID_LOGLVL_TRACE2); g_test_init (&argc, &argv, NULL); global_base = g_strdup_printf("/tmp/crawler-test-%d-%ld", getpid(), time(0)); if (0 != g_mkdir_with_parents(global_base, 0700)) g_error("Preparation failure [%s] : (%d) %s", global_base, errno, strerror(errno)); g_test_add_func("/crawler/dir_explorer/not_found", _test_not_found); g_test_add_func("/crawler/dir_explorer/empty", _test_empty); g_test_add_func("/crawler/dir_explorer/simple", _test_simple); int rc = g_test_run(); _erase(global_base); g_free(global_base); global_base = NULL; return rc; }
Node* _erase(Node* node, const Key& key) { if (node) { if (key < node->key) { node->left = _erase(node->left, key); node->resize(); } else if (key > node->key) { node->right = _erase(node->right, key); node->resize(); } else return _erase(node); } return node; }
static void _erase(const gchar *dn) { const gchar *bn; GError *err = NULL; GDir *dir = g_dir_open(dn, 0, &err); if (dir == NULL) { g_warning("g_dir_open(%s) failed : (%d) %s", dn, errno, strerror(errno)); g_clear_error(&err); return; } while (NULL != (bn = g_dir_read_name(dir))) { gchar *full = g_strconcat(dn, G_DIR_SEPARATOR_S, bn, NULL); (void) g_chmod(full, 0700); if (g_file_test(full, G_FILE_TEST_IS_DIR)) _erase(full); else g_unlink(full); g_free(full); } g_dir_close(dir); g_rmdir(dn); }
void treap::erase(int val) { root = _erase(val, root); }
bool CIMIClassicView::onKeyEvent(const CKeyEvent& key) { unsigned changeMasks = 0; unsigned keycode = key.code; unsigned keyvalue = key.value; unsigned modifiers = key.modifiers; #ifdef DEBUG printf("Classic View got a key (0x%x-0x%x-0x%x)...", keycode, keyvalue, modifiers); if (((modifiers & IM_CTRL_MASK) != 0) && (keyvalue == 'P' || keyvalue=='p')) m_pIC->printLattice(); #endif if (m_pHotkeyProfile && m_pHotkeyProfile->isModeSwitchKey(key)) { setStatusAttrValue(CIMIWinHandler::STATUS_ID_CN, (!m_bCN)?1:0); if (!m_pIC->isEmpty ()) { changeMasks |= CANDIDATE_MASK | PREEDIT_MASK; clearIC (); } } else if (m_pHotkeyProfile && m_pHotkeyProfile->isPunctSwitchKey(key)) { // On CTRL+. switch Full/Half punc changeMasks |= KEYEVENT_USED; setStatusAttrValue(CIMIWinHandler::STATUS_ID_FULLPUNC, (!m_bFullPunct)?1:0); } else if (m_pHotkeyProfile && m_pHotkeyProfile->isSymbolSwitchKey(key)) { // On SHIFT+SPACE switch Full/Half symbol changeMasks |= KEYEVENT_USED; setStatusAttrValue(CIMIWinHandler::STATUS_ID_FULLSYMBOL, (!m_bFullSymbol)?1:0); } else if (modifiers == IM_CTRL_MASK && keycode == IM_VK_LEFT) { // move left if (!m_pIC->isEmpty ()) { changeMasks |= KEYEVENT_USED; _moveLeft (changeMasks); } } else if (modifiers == IM_CTRL_MASK && keycode == IM_VK_RIGHT) { // move right if (!m_pIC->isEmpty ()) { changeMasks |= KEYEVENT_USED; _moveRight (changeMasks); } } else if ( ((modifiers == 0 && keycode == IM_VK_PAGE_UP) || (m_pHotkeyProfile && m_pHotkeyProfile->isPageUpKey (key))) && !m_pIC->isEmpty() ) { changeMasks |= KEYEVENT_USED; int sz = m_candiList.size() + ((m_tailSentence.size() > 0)?1:0); if (sz > 0 && m_candiPageFirst > 0) { m_candiPageFirst -= m_candiWindowSize; if (m_candiPageFirst < 0) m_candiPageFirst = 0; changeMasks |= CANDIDATE_MASK; } } else if ( ((modifiers == 0 && keycode == IM_VK_PAGE_DOWN) || (m_pHotkeyProfile && m_pHotkeyProfile->isPageDownKey (key))) && !m_pIC->isEmpty() ) { changeMasks |= KEYEVENT_USED; int sz = m_candiList.size() + ((m_tailSentence.size() > 0)?1:0); if (sz > 0 && m_candiPageFirst + m_candiWindowSize < sz) { m_candiPageFirst += m_candiWindowSize; changeMasks |= CANDIDATE_MASK; } } else if (modifiers == IM_CTRL_MASK && (keyvalue >= '0' && keyvalue <= '9') && (m_candiWindowSize >= 10 || keyvalue < ('1' + m_candiWindowSize)) && !m_pIC->isEmpty ()) { changeMasks |= KEYEVENT_USED; unsigned sel = (keyvalue == '0'? 9: keyvalue-'1'); _deleteCandidate (sel, changeMasks); goto PROCESSED; } else if ((modifiers & (IM_CTRL_MASK | IM_ALT_MASK | IM_RELEASE_MASK)) == 0) { if ((keyvalue >= '0' && keyvalue <= '9') && (m_candiWindowSize >= 10 || keyvalue < ('1' + m_candiWindowSize))) { // try to make selection if (!m_pIC->isEmpty ()) { changeMasks |= KEYEVENT_USED; unsigned sel = (keyvalue == '0'? 9: keyvalue-'1'); _makeSelection (sel, changeMasks); } else { m_numeric_mode = true; } goto PROCESSED; } if (keyvalue == '.' && m_numeric_mode) { m_numeric_mode = false; goto PROCESSED; } m_numeric_mode = false; if (islower(keyvalue)) { changeMasks |= KEYEVENT_USED; _insert (keyvalue, changeMasks); } else if (keyvalue > 0x20 && keyvalue < 0x7f) { changeMasks |= KEYEVENT_USED; if (m_pIC->isEmpty ()) { _insert (keyvalue, changeMasks); _doCommit (); clearIC (); } else { _insert (keyvalue, changeMasks); } } else if (keycode == IM_VK_BACK_SPACE || keycode == IM_VK_DELETE) { if (!m_pIC->isEmpty ()) { changeMasks |= KEYEVENT_USED; _erase (keycode == IM_VK_BACK_SPACE, changeMasks); } } else if (keycode == IM_VK_SPACE) { if (!m_pIC->isEmpty ()) { changeMasks |= KEYEVENT_USED; _makeSelection (0, changeMasks); } } else if (keycode == IM_VK_ENTER) { if (!m_pIC->isEmpty ()) { changeMasks |= KEYEVENT_USED | CANDIDATE_MASK | PREEDIT_MASK; _doCommit (false); clearIC (); } } else if (keycode == IM_VK_ESCAPE) { if (!m_pIC->isEmpty ()) { changeMasks |= KEYEVENT_USED | CANDIDATE_MASK | PREEDIT_MASK; clearIC (); } } else if (keycode == IM_VK_LEFT) { // move left syllable if (!m_pIC->isEmpty ()) { changeMasks |= KEYEVENT_USED; _moveLeftSyllable (changeMasks); } } else if (keycode == IM_VK_RIGHT) { // move right syllable if (!m_pIC->isEmpty ()) { changeMasks |= KEYEVENT_USED; _moveRightSyllable (changeMasks); } } else if (keycode == IM_VK_HOME) { // move home if (!m_pIC->isEmpty ()) { changeMasks |= KEYEVENT_USED; _moveHome (changeMasks); } } else if (keycode == IM_VK_END) { // move end if (!m_pIC->isEmpty ()) { changeMasks |= KEYEVENT_USED; _moveEnd (changeMasks); } } } else { goto RETURN; } PROCESSED:; m_pHotkeyProfile->rememberLastKey(key); RETURN:; #ifdef DEBUG printf(" |-->(Mask=0x%x)\n", changeMasks); #endif updateWindows (changeMasks); return changeMasks & KEYEVENT_USED; }
void erase(const Key& key) { _erase(_root, key); }
bool CIMIXhView::onKeyEvent(const CKeyEvent& key) { unsigned changeMasks = 0; unsigned keycode = key.code; unsigned keyvalue = key.value; unsigned modifiers = key.modifiers; bool isKeyStroke = false; #ifdef DEBUG printf("Xh View got a key (0x%x-0x%x-0x%x)...\n", keycode, keyvalue, modifiers); if (((modifiers & IM_CTRL_MASK) != 0) && (keyvalue == 'P' || keyvalue == 'p')) m_pIC->printLattice(); #endif if (m_pHotkeyProfile && m_pHotkeyProfile->isModeSwitchKey(key)) { setStatusAttrValue(CIMIWinHandler::STATUS_ID_CN, (!m_bCN) ? 1 : 0); if (!m_pIC->isEmpty()) { changeMasks |= CANDIDATE_MASK | PREEDIT_MASK; clearIC(); } } else if (m_pHotkeyProfile && m_pHotkeyProfile->isPunctSwitchKey(key)) { // On CTRL+. switch Full/Half punc changeMasks |= KEYEVENT_USED; setStatusAttrValue(CIMIWinHandler::STATUS_ID_FULLPUNC, (!m_bFullPunct) ? 1 : 0); } else if (m_pHotkeyProfile && m_pHotkeyProfile->isSymbolSwitchKey(key)) { // On SHIFT+SPACE switch Full/Half symbol changeMasks |= KEYEVENT_USED; setStatusAttrValue(CIMIWinHandler::STATUS_ID_FULLSYMBOL, (!m_bFullSymbol) ? 1 : 0); } else if (modifiers == IM_CTRL_MASK && keycode == IM_VK_LEFT) { // move left if (!m_pIC->isEmpty()) { changeMasks |= KEYEVENT_USED; _moveLeft(changeMasks); } } else if (modifiers == IM_CTRL_MASK && keycode == IM_VK_RIGHT) { // move right if (!m_pIC->isEmpty()) { changeMasks |= KEYEVENT_USED; _moveRight(changeMasks); } } else if (((modifiers == 0 && keycode == IM_VK_PAGE_UP) || (m_pHotkeyProfile && m_pHotkeyProfile->isPageUpKey(key))) && !m_pIC->isEmpty()) { changeMasks |= KEYEVENT_USED; if (m_candiPageFirst > 0) { m_candiPageFirst -= m_candiWindowSize; if (m_candiPageFirst < 0) m_candiPageFirst = 0; changeMasks |= CANDIDATE_MASK; } } else if (((modifiers == 0 && keycode == IM_VK_PAGE_DOWN) || (m_pHotkeyProfile && m_pHotkeyProfile->isPageDownKey(key))) && !m_pIC->isEmpty()) { changeMasks |= KEYEVENT_USED; if (m_candiPageFirst + m_candiWindowSize < candidateListSize()) { m_candiPageFirst += m_candiWindowSize; changeMasks |= CANDIDATE_MASK; } } else if (m_pHotkeyProfile && m_pHotkeyProfile->isCandiDeleteKey(key, m_candiWindowSize) && !m_pIC->isEmpty()) { changeMasks |= KEYEVENT_USED; unsigned sel = (keyvalue == '0' ? 9 : keyvalue - '1'); deleteCandidate(sel, changeMasks); goto PROCESSED; } else if ((modifiers & (IM_CTRL_MASK | IM_ALT_MASK | IM_SUPER_MASK | IM_RELEASE_MASK)) == 0) { if (isKeyValueSelectNumber(keyvalue)) { // try to make selection if (!m_pIC->isEmpty()) { changeMasks |= KEYEVENT_USED; unsigned sel = getSelectionNumber(keyvalue); makeSelection(sel, changeMasks); } else if (m_smartPunct) { m_pIC->omitNextPunct(); } // using the same keys between selections isKeyStroke = true; goto PROCESSED; } if (keyvalue >= '1' && keyvalue <= '5') { changeMasks |= KEYEVENT_USED; _insert(keyvalue, changeMasks); isKeyStroke = true; } else if (keyvalue > 0x60 && keyvalue < 0x7b) { /* islower(keyvalue) */ changeMasks |= KEYEVENT_USED; _insert(keyvalue, changeMasks); isKeyStroke = true; } else if (keyvalue > 0x20 && keyvalue < 0x7f) { /* isprint(keyvalue) && !isspace(keyvalue) */ changeMasks |= KEYEVENT_USED; if (m_pIC->isEmpty()) { _insert(keyvalue, changeMasks); _doCommit(); clearIC(); } else { _insert(keyvalue, changeMasks); } isKeyStroke = true; } else if (keycode == IM_VK_BACK_SPACE || keycode == IM_VK_DELETE) { if (!m_pIC->isEmpty()) { changeMasks |= KEYEVENT_USED; _erase(keycode == IM_VK_BACK_SPACE, changeMasks); } isKeyStroke = true; } else if (keycode == IM_VK_SPACE) { if (!m_pIC->isEmpty()) { changeMasks |= KEYEVENT_USED; makeSelection(0, changeMasks); } else { wstring wstr = (CFullCharManager::fullPuncOp())(keyvalue); if (wstr.size()) { _commitString(wstr); changeMasks |= KEYEVENT_USED; } } } else if (keycode == IM_VK_ENTER) { if (!m_pIC->isEmpty()) { changeMasks |= KEYEVENT_USED | CANDIDATE_MASK | PREEDIT_MASK; _doCommit(false); clearIC(); } } else if (keycode == IM_VK_ESCAPE) { if (!m_pIC->isEmpty()) { changeMasks |= KEYEVENT_USED | CANDIDATE_MASK | PREEDIT_MASK; clearIC(); } } else if (keycode == IM_VK_LEFT) { // move left syllable if (!m_pIC->isEmpty()) { changeMasks |= KEYEVENT_USED; _moveLeftSyllable(changeMasks); } } else if (keycode == IM_VK_RIGHT) { // move right syllable if (!m_pIC->isEmpty()) { changeMasks |= KEYEVENT_USED; _moveRightSyllable(changeMasks); } } else if (keycode == IM_VK_HOME) { // move home if (!m_pIC->isEmpty()) { changeMasks |= KEYEVENT_USED; _moveHome(changeMasks); } } else if (keycode == IM_VK_END) { // move end if (!m_pIC->isEmpty()) { changeMasks |= KEYEVENT_USED; _moveEnd(changeMasks); } } } else { goto RETURN; } PROCESSED:; m_pHotkeyProfile->rememberLastKey(key); RETURN:; if (isKeyStroke) { setOpMode(XHVOM_INPUT); } else { setOpMode(XHVOM_SELECT); } #ifdef DEBUG printf(" |-->(Mask=0x%x)\n", changeMasks); #endif updateWindows(changeMasks); return changeMasks & KEYEVENT_USED; }