Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <string>
- #include <cstdlib>
- #include "UsuarioTwitter.hpp"
- #include "twitter.hpp"
- #include <fstream>
- #include <cstddef>
- #include <cassert>
- #include <iostream>
- using namespace std;
- using namespace bblProgII;
- namespace{
- void leer(ifstream& f_in, string& seg){
- f_in >> ws;
- getline(f_in,seg);
- }
- }
- namespace bblProgII{
- // Constructor por defecto
- // Inicializa la red como red vacía, sin usuarios y sin
- // sin ningún usuario conectado
- Twitter::Twitter() {
- usuarios=NULL;
- usuario_conectado=NULL;
- num_users=0;
- }
- // Constructor extendido para cargar toda la red social desde disco.
- // Recibe como parámetro el nombre del fichero con la lista de usuarios
- // de la red. A partir de ahí, carga desde disco todos los seguidores,
- // usuarios seguidos y tweets de cada uno de los
- // usuarios de la red.
- // Si el fichero de la lista de usuario existe, se procede a la carga
- // de la red desde disco y se devuelve 'true' a través del parámetro
- // 'red_cargada'. Si no, la red permanece vacía y se devuelve
- // 'false' a través del parámetro.
- // Los ficheros de datos de cada usuario tienen como nombre el
- // nombre del usuario y como extensión '.seg' para los seguidores,
- // '.sig' para los usuarios seguidos y '.twt' para los tweets.
- Twitter::Twitter(const std::string &fic_lista_usuarios, bool &red_cargada){
- ifstream f_in;
- f_in.open(fic_lista_usuarios.c_str());
- bool ok=true;
- Resultado res_seg,res_sig,res_twt, res;
- std::string user;
- if(f_in.fail()){
- red_cargada=false;
- }else{
- UsuarioTwitter nombreUsuario;
- red_cargada=true;
- leer(f_in, user);
- while(!f_in.fail() && ok){
- nombreUsuario.establecer_id(user);
- // cout << nombreUsuario.obtener_id(); // Con esto compruebo que la lectura de los datos del fichero es correcta
- nombreUsuario.cargar_todo (nombreUsuario.obtener_id()+".seg", nombreUsuario.obtener_id()+".sig",
- nombreUsuario.obtener_id()+".twt", res_seg, res_sig, res_twt);
- // cout << nombreUsuario.obtener_id() << "***" << num_users << endl;
- //cout << nombreUsuario.obtener_id() << "***" << l << endl;
- // nombreUsuario.imprimir_seguidores(0);
- // nombreUsuario.imprimir_siguiendo(0);
- // nombreUsuario.imprimir_tweets(0);
- // aqui creo que tengo que ir añandiendo cada usuario a la lista de usuarios
- // Cargo usuario --> añado a usuarios->usuario y actualizo el ptr->sig ( AÑADIR AL FINAL)
- // Ya hay unna funcion que es void insertar_usuario(const UsuarioTwitter &nuevo_usuario);
- this->insertar_usuario(nombreUsuario,res); //¿POR QUE NO PUEDO HACER ESTO? VIOLACION DE SEGMENTO
- leer(f_in, user);
- num_users++;
- }
- ok= ok && f_in.eof();
- f_in.close();
- }
- }
- // Constructor de copia de la clase
- Twitter::Twitter(const Twitter &otro_twitter){
- PtrUsuario aux1, aux2=otro_twitter.usuarios;
- usuarios=NULL;
- if(aux2!=NULL){
- usuarios=new NodoUsuario;
- usuarios->sig=NULL;
- aux1=usuarios;
- aux2=aux2->sig;
- while(aux2!=NULL){
- aux1->sig=new NodoUsuario;
- aux1=aux1->sig;
- aux1->usuario=aux2->usuario;
- aux1->sig=NULL;
- aux2=aux2->sig;
- }
- }
- }
- // Operador de asignación
- Twitter & Twitter::operator=(const Twitter &otro_twitter){
- /*if(this!=otro_twitter){
- num_users=otro_twitter.num_users;
- for(unsigned i=0;i<num_users;i++){
- }*/
- }
- // Destructor de la clase.
- //
- Twitter::~Twitter(){
- borrar_todo();
- }
- // Devuelve el número de usuarios de la red social
- unsigned Twitter::num_usuarios() const{
- return num_users;
- }
- // Devuelve el id del usuario actualmente conectado. Si no hay usuario
- // conectado, devuelve una cadena vacía
- std::string Twitter::usuario_actual() const{
- return usuarios->usuario.obtener_id();
- }
- //------------------------------------------------------------------
- // PARA EL USUARIO ACTUAL. |
- // ------------------------|
- //
- // Devuelve los seguidores del usuario conectado
- // Si no hay usuario conectado, los métodos
- // devuelven false a través de 'conectado'. Si no, devuelven true.
- // Devuelve la lista de seguidores
- void Twitter::obtener_seguidores(Usuarios &lista_seg, bool &conectado) const{
- }
- // Devuelve la lista de usuarios a los que se sigue el usuario conectado
- void Twitter::obtener_siguiendo(Usuarios &lista_sig, bool &conectado) const{
- }
- // Devuelve la lista de tweets del usuario conectado
- void Twitter::obtener_tweets(Tweets &lista_tweets, bool &conectado) const{
- }
- // OPCIONAL!
- // Devuelve la lista de menciones al usuario conectado
- // void obtener_menciones(Menciones &lista_men, bool &conectado) const;
- // Indica si un determinado usuario es seguidor del usuario conectado
- void Twitter::me_sigue(const std::string &otro_usuario, bool &mesigue, bool &conectado) const{
- }
- // Indica si este usuario conectado está siguiendo a otro
- void Twitter::estoy_siguiendo(const std::string &otro_usuario, bool &sigo, bool &conectado) const{
- }
- // Devuelve el número de seguidores del usuario conectado
- void Twitter::num_seguidores(unsigned &mesigue, bool &conectado) const{
- }
- // Devuelve el número de usuarios a los que sigue el usuario conectado
- void Twitter::num_siguiendo(unsigned &siguiendo, bool &conectado) const{
- }
- // Devuelve el número de tweets del usuario
- void Twitter::num_tweets(unsigned &n, bool &conectado) const{
- }
- // OPCIONAL!
- // Devuelve el número de menciones
- // void num_menciones(unsigned &n, bool &conectado) const;
- // Imprime por pantalla la lista de seguidores
- // Si num_imprime == 0, imprime todos los seguidores.
- // PRECONDICIÓN: num_imprime <= num_seguidores
- void Twitter::imprimir_seguidores(unsigned num_imprime, bool &conectado) const{
- }
- // Imprime por pantalla la lista de usuarios a los que sigue
- // Si num_imprime == 0, imprime todos los usuarios a los que sigue.
- // PRECONDICIÓN: num_imprime <= num_siguiendo
- void Twitter::imprimir_siguiendo(unsigned num_imprime, bool &conectado) const{
- }
- // Imprime por pantalla la lista de tweets
- // Si num_imprime == 0, imprime todos los tweets del usuario.
- // PRECONDICIÓN: num_imprime <= num_tweets
- void Twitter::imprimir_tweets(unsigned num_imprime, bool &conectado) const{
- }
- // OPCIONAL!
- // Imprime por pantalla la lista de menciones del usuario conectado
- // Si num_imprime == 0, imprime todas las menciones.
- // PRECONDICIÓN: num_imprime <= num_menciones
- // void imprimir_menciones(const unsigned num_imprime, bool &conectado) const;
- // Modifica el identificador del usuario actualmente conectado.
- // Además, deben actualizarse las listas de 'seguidores' y
- // 'siguiendo' de los demás usuarios de la red, de manera
- // que el nuevo indentificador de usuario sustituya al
- // antiguo en aquellas listas de usuarios donde aparecía.
- // Devuelve 'true' si ha sido posible modificar el usuario
- // actualmente conectado (el usuario existe en la red)
- void Twitter::establecer_id(const std::string &nuevo_id, bool &conectado){
- }
- // Inserta un usuario en la lista de usuarios a los que sigue-
- // El usuario debe estar conectado y el usuario al que se quiere
- // seguir debe existir. Si no hay usuario conectado actualmente,
- // se devuelve 'false' a través de 'conectado'. Si el usuario que
- // se quiere incluir en la lista de usuarios seguidos no existe en la
- // red, se devuelve 'NO_EXISTE' a través de 'res'.
- // Si ambos usuarios existen, se actualizan las listas de seguidores
- // y siguiendo.Si la lista de seguidores o siguiendo están
- // llenas, se devuelve 'LISTA_LLENA' a través de 'res'.
- void Twitter::nuevo_siguiendo(const std::string &nuevo, Resultado &res, bool &conectado){
- }
- // Inserta un nuevo tweet al final de la lista de tweets. Si la lista de
- // tweets está llena, se devuelve 'LISTA_LLENA' a través de 'res'. Si no,
- // se devuelve 'OK'. La longitud máxima
- void Twitter::nuevo_tweet(const Tweet &nuevo, Resultado &res, bool &conectado){
- }
- // Elimina un usuario en la lista de usuarios a los que sigue
- // El usuario debe estar conectado y el usuario al que se quiere
- // dejar de seguir debe existir. Si no hay usuario conectado actualmente,
- // se devuelve 'false' a través de 'conectado'. Si el usuario que
- // se quiere eliminar de la lista de usuarios seguidos no existe en la
- // red, se devuelve 'NO_EXISTE' a través de 'res'. Si ambos usuarios
- // existen, se actualizan las lista se de seguidores y siguiendo,
- // eliminando los nombres de los usuarios correspondientes.
- void Twitter::eliminar_siguiendo(const std::string &usuario, Resultado &res, bool &conectado){
- }
- // OPCIONAL!
- // Se obtiene la lista de menciones que los demás usuarios de
- // la red tienen con el usuario actualmente conectado y se
- // almacenan en la lista de menciones del usuario actualmente
- // conectado.
- // Las menciones comienzan todas con el carácter ampsersand ('@').
- // void obtener_menciones(bool &conectado);
- //------------------------------------------------------------------
- // MÉTODOS DE LA RED SOCIAL
- // Imprime por pantalla los usuarios actuales de la red social
- void Twitter::imprimir_usuarios() const{
- PtrUsuario ptr=usuarios;
- while((ptr!=NULL)){
- usuarios->usuario.obtener_id();
- ptr=ptr->sig;
- }
- }
- // Cambia el usuario actualmente conectado a la red. Si el usuario
- // existe, se cambia el usuario y se devuelve 'OK' a través del
- // parámetro 'res'. Si el usuario no existe, se mantiene el usuario
- // actual y se devuelve 'NO_EXISTE' a través del parámetro 'res'
- void Twitter::cambiar_usuario_actual(const std::string &nuevo_id_actual, Resultado &res){
- }
- // Insertar un nuevo usuario en la red social, a partir de su
- // id de usuario, con todos sus datos vacíos (lista de seguidores,
- // lista de tweets, etc.). Si el id del nuevo usuario no existe,
- // se inserta en la red y se devuelve 'OK' a través del parámetro
- // 'res'. Si el usuario ya existía, se devuelve 'YA_EXISTE' a
- // través de 'res'.
- void Twitter::insertar_usuario(const std::string &nuevo_usuario, Resultado &res){
- PtrUsuario ptr=buscar_usuario(nuevo_usuario);
- if(ptr!=NULL){
- res=YA_EXISTE;
- }else{
- //insertar_final(nuevo_usuario);
- res=OK;
- }
- }
- // Insertar un nuevo usuario en la red social.
- // Si el id del nuevo usuario no existe,
- // se inserta en la red y se devuelve 'OK' a través del parámetro
- // 'res'. Si el usuario ya existía, se devuelve 'YA_EXISTE' a
- // través de 'res'.
- void Twitter::insertar_usuario(const UsuarioTwitter &nuevo_usuario, Resultado &res){
- PtrUsuario ptr=buscar_usuario(nuevo_usuario.obtener_id()); // ¿¿¿¿ERROR!!!!!!!!
- if(ptr!=NULL){
- res=YA_EXISTE;
- }else{
- //insertar_final(nuevo_usuario);
- res=OK;
- }
- }
- // Elimina un usuario en la red social, a partir de su
- // id de usuario. Si el id del nuevo usuario existe,
- // se elimina de la red y se devuelve 'OK' a través del parámetro
- // 'res'. Deben actualizarse la lista de seguidores y siguiendo
- // en las listas de los demás usuarios de la red.
- // Si el usuario no existía, se devuelve 'NO_EXISTE' a
- // través de 'res'.
- void Twitter::eliminar_usuario(const std::string &usuario, Resultado &res){
- }
- // Guarda toda la red social en disco. El nombre de fichero con los nombres de
- // usuario se pasa como parámetro. Los datos de cada usuario se guardan
- // según se indica en la clase UsuarioTwitter
- void Twitter::guardar_todo(const std::string &nom_fic_usuario) const{
- }
- // MÉTODOS PRIVADOS:
- // Busca un usuario en la lista de usuarios. Si lo encuentra,
- // devuelve un puntero al nodo de la lista que contiene el usuario.
- // Si no lo encuentra, devuelve NULL
- Twitter::PtrUsuario Twitter::buscar_usuario(const std::string &id_usuario) const{
- PtrUsuario ptr=usuarios;
- while((ptr!=NULL)&&(ptr->usuario.obtener_id()!=id_usuario)){
- ptr=ptr->sig;
- }
- return ptr;
- }
- // Eliminar toda la lista de usuarios
- void Twitter::borrar_todo(){
- PtrUsuario aux;
- while(usuarios!=NULL){
- aux=usuarios;
- usuarios=usuarios->sig;
- delete aux;
- }
- }
- // Insertar un nuevo usuario al final de la lista de usuarios
- void Twitter::insertar_final(const UsuarioTwitter &nuevo_usuario){
- PtrUsuario ptr,nuevo;
- nuevo=new NodoUsuario;
- nuevo->usuario=nuevo_usuario;
- nuevo->sig=NULL;
- if(usuarios==NULL){
- usuarios=nuevo;
- }else{
- ptr=usuarios;
- while(ptr->sig!=NULL){
- ptr=ptr->sig;
- }
- ptr->sig=nuevo;
- }
- }
- // Eliminar un usuario de la lista de usuarios
- // PRECONDICIÓN: el usuario existe
- void Twitter::borrar_usuario(const std::string &id_usuario){
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement