void PlayFairCipher::setKey(std::string key) { // Store the original key key_ = key; for(unsigned a{0}; a<key_.size(); ++a) { key_[a]=toupper(key_[a]); } // Append the alphabet std::vector <char>::iterator rm_symb, diff; const std::vector<char> alphabet{'A','B','C','D','E','F','G','H','I','J','K','L','M',\ 'N','O','P','Q','R','S','T','U','V','W','X','Y','Z'}; std::vector<char> grid = alphabet; std::transform(key_.begin(), key_.end(), key_.begin(), ::toupper); std::vector<char> key_vec(key_.begin(), key_.end()); // Remove elements from key that are non-alpha and create a new vector from the result rm_symb = std::remove_if(key_vec.begin(), key_vec.end(),[](char i) { return !isalpha(i); }); std::cout << std::endl << std::endl; key_vec.erase(rm_symb, key_vec.end()); for(unsigned k{0}; k<key_vec.size(); ++k) { if(key_vec[k]=='J') { key_vec[k] = 'I'; } std::cout << key_vec[k]; } for (std::vector<char>::iterator dup = key_vec.begin(); dup != key_vec.end(); ++dup) key_vec.erase(std::remove(dup + 1, key_vec.end(), *dup), key_vec.end()); // Add the remainder of the alphabet to the end of the array for(unsigned k{0}; k<key_vec.size(); ++k) { diff = std::remove(grid.begin(), grid.end(), key_vec[k]); } grid.insert(grid.begin(), key_vec.begin(), key_vec.end()); // Print the grid grid.resize(26); for(unsigned k{0}; k<grid.size(); ++k) { std::cout << grid[k] << std::endl; } // Store the coords for each letter // Store the playfair cipher key map }
namespace gaen { static const ivec4 kKeyGraveAccent = key_vec(kKEY_GraveAccent); Editor::Editor(bool isActive) : mIsActive(isActive) { mTask = Task::create(this, HASH::editor__); broadcast_insert_task(mTask.id(), active_thread_id(), mTask); InputMgr::register_key_press_listener(HASH::editor__, mTask.id()); } void Editor::processKeyPress(const ivec4 & keys) { if (keys == kKeyGraveAccent) { mIsActive = !mIsActive; broadcast_message(HASH::editor_activate__, kMessageFlag_Editor, mTask.id(), to_cell(mIsActive)); } } template <typename T> MessageResult Editor::message(const T& msgAcc) { const Message & msg = msgAcc.message(); switch (msg.msgId) { case HASH::key_press: { messages::KeyPressR<T> msgR(msgAcc); processKeyPress(msgR.keys()); break; } case HASH::fin: { InputMgr::deregister_key_press_listener(HASH::editor__, mTask.id()); break; } default: PANIC("Unknown Editor message: %d", msg.msgId); } return MessageResult::Consumed; } // Template decls so we can define message func here in the .cpp template MessageResult Editor::message<MessageQueueAccessor>(const MessageQueueAccessor & msgAcc); template MessageResult Editor::message<MessageBlockAccessor>(const MessageBlockAccessor & msgAcc); } // namespace gaen
rc_t smthread_main_t::mr_index_test5() { cout << endl; cout << " ------- TEST5 -------" << endl; cout << " 1. Add initial partitions " << endl; cout << "To test merge partitions when root1,level < root2.level in MRBtree!" << endl; cout << endl; // create the records and their assocs as in test 1 to create partitions with different tree levels W_DO(mr_index_test1()); int key = (int) (0.8 * _num_rec); vec_t key_vec(&key, sizeof(key)); cout << "delete_partition: stid = " << _index_id << ", key = " << key << endl; W_DO(ssm->delete_partition(_index_id, key_vec, _bIgnoreLatches)); W_DO(print_the_index()); return RCOK; }
rc_t smthread_main_t::mr_index_test2() { cout << endl; cout << " ------- TEST2 -------" << endl; cout << "Create a partition after the some assocs are created in MRBtree" << endl; cout << "Then add new assocs" << endl; cout << endl; cout << "Creating multi rooted btree index." << endl; W_DO(ssm->begin_xct()); W_DO(create_the_index()); W_DO(ssm->commit_xct()); // create the records and their assocs threadptr creator_thread = new smthread_creator_t(_num_rec, _rec_size, _bIgnoreLocks, _bIgnoreLatches, _design_no, 0, _num_rec, _index_id, 2); creator_thread->fork(); creator_thread->join(); delete creator_thread; W_DO(print_the_index()); int key = (int) (0.7 * _num_rec); vec_t key_vec(&key, sizeof(key)); cout << "add_partition: stid = " << _index_id << ", key = " << key << endl; W_DO(ssm->add_partition(_index_id, key_vec, _bIgnoreLatches, &print_updated_rids)); W_DO(print_the_index()); // create two more recs&assocs W_DO(ssm->begin_xct()); cout << "ssm->create_mr_assoc" << endl; el_filler_utest eg; eg._fid = _fid; eg._rec_size = _rec_size; int new_key = _num_rec; eg.j = new_key; vec_t new_key_vec((char*)(&new_key), sizeof(new_key)); cout << "Record key " << new_key << endl; cout << "key size " << new_key_vec.size() << endl; eg._el_size = sizeof(rid_t); if(_design_no == 1) { eg._el.set((char*)(&_last_rid), sizeof(rid_t)); } W_DO(ssm->create_mr_assoc(_index_id, new_key_vec, eg, _bIgnoreLocks, _bIgnoreLatches, &print_updated_rids)); cout << "ssm->create_mr_assoc" << endl; int new_key2 = 0; eg.j = new_key; vec_t new_key_vec2((char*)(&new_key2), sizeof(new_key2)); cout << "Record key " << new_key2 << endl; cout << "key size " << new_key_vec2.size() << endl; if(_design_no == 1) { eg._el.set((char*)(&_first_rid), sizeof(rid_t)); } W_DO(ssm->create_mr_assoc(_index_id, new_key_vec2, eg, _bIgnoreLocks, _bIgnoreLatches, &print_updated_rids)); W_DO(ssm->commit_xct()); W_DO(print_the_index()); return RCOK; }