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

}
Exemple #2
0
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;
}