E3Config::E3Config(){ set_m(1000); set_n(1.0); set_theta_e(0); set_gamma_0_2(0.0); set_delta_e(0); set_r_e(0.0); set_alpha(0.0); }
void Sub20::actual_read(const std::string & data) { if (data.size() >= 8) { set_flags(data.substr(0, 4)); const uint16_t mlen = toint(data.substr(4, 2), 256); const uint16_t nlen = toint(data.substr(6, 2), 256); if (data.size() > (8U + mlen + nlen)) { set_m(data.substr(8U, mlen)); set_n(data.substr(8U + mlen, nlen)); } // size = 4 + mlen + nlen; } }
int AES::cargar_fichero (char fichero[]) { ifstream flujo; flujo.open(fichero); if (flujo.is_open()) { string aux_k, aux_m; flujo>>aux_m; flujo>>aux_k; if ((aux_k.size()!=MAX*2)||(aux_m.size()!=MAX*2))//Error, no son 4x4=16*2=32 return 1; set_m(hexstr_to_binstr(aux_m)); set_k(hexstr_to_binstr(aux_k)); round_key = k; flujo.close(); return 0; }
istream& RAM::readFile(istream& file) { vector<string> vTag; I_.clear(); set_n(2); // En esta opción sólo se almacena el opcode y su operando string line, tag, comm, instruc, oper; // Cada línea, etiqueta, comentario, opcode, operando/etiqueta size_t indexC, indexT; // Índice de Comentario, Etiqueta y Et Fin int nLine = 1; // Nº de líneas con código sin comentario. Útil para saber donde van las etiquetas while (getline(file, line)) { // ****** ETIQUETA indexT = line.find(":"); // Índice que guarda el lugar donde termina la etiqueta if (indexT < 1000) { // Si existe etiqueta (el índice no puede ser el npos). tag = line.substr(0, indexT); // Substring que contiene desde el inicio hasta el :, almacena el nombre de la etiqueta tag = Trim(tag.begin(), tag.end()); // Eliminamos los espacios en blanco vTag.push_back(to_string(nLine)); // Se añade a un vector el nº de línea donde aparece vTag.push_back(tag); // Se añade el nombre de la etiqueta indexT++; // Se añade uno al índice de la etiqueta para no coger el caracter : en las instrucciones } else { indexT = 0; // Sino se encuentra etiqueta coloco el índice en 0, para iniciar desde ahí la búsqueda de la instrucción tag = ""; // Si me hiciera almacenar más adelante el nombre de la etiqueta, saber que aquí no tenía } // ****** COMENTARIO indexC = line.find(";"); // Almacena el índice donde empieza el comentario if (indexC < 1000) { // Si existe comentario su índice es distinto del npos (un nº muy grande) comm = line.substr(indexC + 1); // Almacena el comentario, es un substring desde ; hasta el final (se le añade +1 para eliminar ; } else { indexC = line.size(); // Sino se encuentra comentario es hasta el final de la línea la instrucción comm = ""; // Sino existe comentario es "" } // ****** INSTRUCCIONES = OPCODE + OPERANDO/ETIQUETA/NADA if (indexT != indexC) { // Cuando existe código instruc = line.substr(indexT, indexC - indexT); // Substring que contiene la instrucción y el operando/tag juntos instruc.append(" "); // Añado un espacio al final para no exista fallo con el último comando instruc = TrimFirst(instruc.begin(), instruc.end()); // Captura la primera palabra instruc = codOpcode(instruc); // Codifico el opcode if (instruc != "12") { // 12 = HALT, entra salvo que sea 12, que no tiene ni tag ni operando oper = line.substr(indexT, indexC - indexT); // Substring que contiene la instrucción y el operando/tag juntos //oper.append(" "); oper = TrimSecond(oper.begin(), oper.end()); // Se toma la segunda palabra que corresponde con el operando/etiqueta } else oper = ""; // Halt no tiene nada I_.push_back(instruc); // Se añade el opcode a la estructura I_.push_back(oper); // Se añade el operando/etiqueta a la estructura nLine++; // Se incrementa el nº de líneas con código, para identificar la etiqueta } } set_m(nLine - 1); // Al querer sólo contar las líneas con código, y estar el tag primero que instrucc // se me hace necesario incrementarlo dentro de éste, por lo que, al final me sobra uno for (int i = 0; i < vTag.size() / 2; i++) { // Se recorre el vector que almacena las etiquetas y su posición for (int j = 0; j < get_m(); j++) { // Se recorre el vector que almacena el opcode y su operando/etiqueta if (vTag[2 * i + 1] == get_item(j, 1)) // Si coincide el nombre de la etiqueta con el etiqueta del opcode set_item(j, 1, vTag[2 * i]); // Se cambia por el nº de línea } } return file; }