Advertisement
Guest User

Problema

a guest
May 27th, 2015
226
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 9.11 KB | None | 0 0
  1. PAQUETE.HPP
  2.  
  3. #ifndef PAQUETE_HPP_INCLUDED
  4. #define PAQUETE_HPP_INCLUDED
  5. #include <iostream>
  6.  
  7.  
  8.  
  9. enum Excepcion {ERROR_EN_PAQUETE,LISTA_VACIA};
  10.  
  11.  
  12.  
  13.     class Paquete{
  14.     public:
  15.  
  16.         Paquete(const std::string& ide, const unsigned ordi, const std::string& cont);
  17.         Paquete(const Paquete& p);
  18.         std::string get_id() const;
  19.         unsigned get_ord() const;
  20.         std::string get_contenido() const;
  21.         std::string str() const;
  22.         friend bool operator < (const Paquete& p, const Paquete& q);
  23.  
  24.     private:
  25.  
  26.         std::string id;
  27.         unsigned ord;
  28.         std::string contenido;
  29.  
  30.             };
  31.  
  32.  
  33.  
  34. #endif // PAQUETE_HPP_INCLUDED
  35.  
  36. PAQUETE.CPP
  37.  
  38. #include <sstream>
  39. #include "Paquete.hpp"
  40.  
  41.  
  42.  
  43. using namespace std;
  44.  
  45.     Paquete::Paquete(const string& ide, const unsigned ordi, const string& cont){
  46.         if (ide == "" or ordi < 0) throw ERROR_EN_PAQUETE;
  47.         id = ide;
  48.         ord = ordi;
  49.         contenido = cont;
  50.         }
  51.  
  52.     Paquete::Paquete(const Paquete& p){
  53.         id = p.id;
  54.         ord = p.ord;
  55.         contenido = p.contenido;
  56.         }
  57.  
  58.     string Paquete::get_id() const{
  59.         return id;
  60.         }
  61.  
  62.     unsigned Paquete::get_ord() const{
  63.             return ord;
  64.         }
  65.  
  66.     string Paquete::get_contenido() const{
  67.         return contenido;
  68.         }
  69.  
  70.     string Paquete::str() const{
  71.         ostringstream os;
  72.         os << id << " " << ord << " " << contenido;
  73.         return os.str();
  74.         }
  75.  
  76.      bool operator < (const Paquete& p, const Paquete& q){
  77.         return p.ord < q.ord;
  78.         }
  79.  
  80. LISTAPAQUETE.HPP
  81.  
  82. #define LISTAPAQUETE_HPP_INCLUDED
  83. #include "Paquete.hpp"
  84. #include <iostream>
  85.  
  86.  
  87.  
  88.  
  89.  
  90.  
  91.     class ListaPaquetes{
  92.         public:
  93.  
  94.             ListaPaquetes();
  95.             ListaPaquetes(const ListaPaquetes& lp);
  96.         ~ListaPaquetes();
  97.             void clear();
  98.             bool esta_vacia() const;
  99.             std::string primer_id();
  100.             void add_pack(const Paquete& pq);
  101.             std::string recuperar_mensaje(const std::string& id);
  102.             std::string str() const;
  103.  
  104.  
  105.         private:
  106.  
  107.             struct Nodo{
  108.             Paquete * ppack;
  109.             Nodo * sig;
  110.         };
  111.  
  112.         unsigned n_pack;
  113.         Nodo *_primero, *_ultimo;
  114.         void insert_pack(Nodo *ppq);
  115.  
  116.         };
  117.  
  118.  
  119. #endif // LISTAPAQUETE_HPP_INCLUDED
  120.  
  121.  
  122.  
  123. LISTAPAQUETE.CPP
  124.  
  125. #include "ListaPaquete.hpp"
  126. #include <sstream>
  127.  
  128. using namespace std;
  129.  
  130.             ListaPaquetes::ListaPaquetes():n_pack(0), _primero(NULL), _ultimo(NULL) //INICIALIZA LOS PUNTEROS, SIEMPRE A NULL, NO HAY NADA
  131.             {}
  132.  
  133.  
  134.             ListaPaquetes::ListaPaquetes(const ListaPaquetes& lp): n_pack(0), _primero(NULL), _ultimo(NULL){
  135.  
  136.                 if (lp.n_pack > 0){
  137.                     Nodo *ptr = lp._primero;// NODO EMPIEZA EN PRIMERO, DE lp, QUE ES EL QUE LE PASAMOS
  138.                     while(ptr != NULL){         //Terminara cuando prt != NULL
  139.                         add_pack(*(ptr->ppack));
  140.                         ptr = ptr->sig;
  141.             }
  142.         }
  143.     }
  144.  
  145.  
  146.             ListaPaquetes::~ListaPaquetes(){
  147.                 if (n_pack > 0){
  148.                     Nodo *ptr = _primero;
  149.                     while(ptr != NULL){
  150.                         _primero = _primero->sig; //Primero me cargo el packete y luego me cargo el puntero. avanzo el puntero.
  151.                         delete (ptr->ppack);
  152.                         delete ptr;
  153.                         ptr = _primero;
  154.                     }
  155.             }
  156.         }
  157.             void ListaPaquetes::clear(){
  158.                 if (n_pack > 0){
  159.                     Nodo *ptr = _primero;
  160.                     while(ptr != NULL){
  161.                         _primero = _primero->sig; //Primero me cargo el packete y luego me cargo el puntero. avanzo el puntero.
  162.                         delete (ptr->ppack);
  163.                         delete ptr;
  164.                         ptr = _primero;
  165.                     }
  166.                     _primero = (NULL); //LIMPIO LA ESTRUCTURA.
  167.                     _ultimo = _primero;
  168.                     n_pack = 0;
  169.             }
  170. }
  171.             bool ListaPaquetes::esta_vacia() const{
  172.                 if (n_pack == 0) throw LISTA_VACIA;
  173.                 return n_pack == 0;
  174.                 }
  175.  
  176.             string ListaPaquetes::primer_id(){
  177.                 return _primero->ppack->get_id();
  178.  
  179.             }
  180.  
  181.  
  182.             void ListaPaquetes::add_pack(const Paquete& pq){
  183.                 Nodo *ptr = new Nodo;
  184.                 ptr->sig = NULL;
  185.                 ptr->ppack = new Paquete(pq);
  186.  
  187.                 if (n_pack == 0) { //Comprobamos si el estado de la trasmsion esta por inicializar, caso NULL
  188.  
  189.                     _primero = ptr;
  190.                 }else{
  191.                     _ultimo->sig = ptr;
  192.             }
  193.                     _ultimo = ptr;
  194.                     ++ n_pack;
  195.         }
  196.  
  197.  
  198.  
  199.  
  200.  
  201.         string ListaPaquetes::recuperar_mensaje(const string& id){
  202.             ListaPaquetes ListaAuxiliar;
  203.             Nodo *actual = _primero;
  204.             Nodo *anterior = NULL;
  205.  
  206.             while(actual != NULL){
  207.                 if(actual->ppack->get_id() == id){
  208.                    ListaAuxiliar.insert_pack(actual);
  209.            /*VERIFICAR SI ES _primero y colocar _primero adecuadamente*/
  210.                     if(actual == _primero){
  211.                         _primero = _primero->sig;
  212.             }
  213.             /*AJUSTAR PUNTEROS DEL ANTERIOR AL BORRADO*/
  214.                     else if (actual != _primero or actual != _ultimo){
  215.                         anterior->sig = actual->sig;
  216.             }
  217.            /*VERIFICAR SI ES _ultimo y colocar _ultimo adecuadamente*/
  218.                     else if(actual == _ultimo){
  219.             _ultimo = anterior;
  220.                      
  221.                          
  222.             }
  223.  
  224.  
  225.             --n_pack;
  226.         }
  227.             anterior = actual;
  228.             actual = actual->sig;
  229.     }
  230.             actual = ListaAuxiliar._primero;
  231.             ostringstream os;
  232.  
  233.             while (actual != NULL){
  234.                 os << actual->ppack->get_contenido();
  235.                 actual = actual->sig;
  236.  
  237.                 }
  238.                 return os.str();
  239.  
  240.   }
  241.  
  242.  string ListaPaquetes::str() const{
  243.     Nodo *actual = _primero;
  244.     ostringstream os;
  245.  
  246.     while (actual != NULL) {
  247.         os << actual->ppack->get_id() << " " << actual->ppack->get_ord() << " " <<  actual->ppack->get_contenido() << endl;
  248.         actual = actual->sig;
  249.  
  250.         }
  251.  
  252.         return os.str();
  253.  }
  254. //AUX
  255.  
  256. void ListaPaquetes::insert_pack(Nodo *ppq){
  257.  
  258.  
  259.     Nodo *aux;
  260.  
  261.     //Creacion
  262.     if (_primero == NULL){
  263.             _primero = ppq;
  264.             aux = ppq;
  265.             ppq->sig = NULL;
  266.             _ultimo = ppq;
  267.  
  268.     }else{
  269.         //Nuevo nodo menor al _primero
  270.         if  (_primero->ppack->get_ord() > (ppq->ppack->get_ord())) {
  271.                 ppq->sig = _primero;
  272.                 _primero = ppq;
  273.  
  274.         }else{
  275.             //Insercción normal.
  276.             aux = _primero;
  277.             //Búsqueda
  278.             while(aux->sig!= NULL and (aux->sig->ppack->get_ord()) < (ppq->ppack->get_ord())) {
  279.                 aux = aux->sig;
  280.             }
  281.             ppq->sig = aux->sig;
  282.             aux->sig = ppq;
  283.  
  284.             if(ppq->sig == NULL){
  285.                 _ultimo = ppq;
  286.             }
  287.         }
  288.       }
  289.     ++n_pack;
  290.     }
  291.  
  292. RECEPTOR.HPP
  293.  
  294. #include "ListaPaquete.hpp"
  295. #include <vector>
  296.  
  297.  //NO QUEREMOS STD
  298.  
  299.  
  300. class Receptor{
  301.     public:
  302.  
  303.  
  304.         Receptor();
  305.         Receptor(const Receptor& rc);
  306.         ~Receptor();
  307.         void clear();
  308.         void add_pack(const Paquete& pq);
  309.         std::string extraer_msgs();
  310.         std::string str() const;
  311.  
  312.     private:
  313.  
  314.         ListaPaquetes transmisiones;
  315.         std::vector<std::string> msgs_recibidos;
  316.  
  317.  
  318. };
  319.  
  320. #endif // RECEPTOR_HPP_INCLUDED
  321.  
  322. RECEPTOR.CPP
  323.  
  324. #include "Receptor.hpp"
  325. #include <iostream>
  326.  
  327. using namespace std;
  328.  
  329.         Receptor::Receptor(){}
  330.  
  331.  
  332.         Receptor::Receptor(const Receptor& rc){}
  333.  
  334.  
  335.         Receptor::~Receptor(){}
  336.  
  337.  
  338.         void Receptor::clear(){}
  339.  
  340.  
  341.         void Receptor::add_pack(const Paquete& pq){}
  342.  
  343.  
  344.         string Receptor::extraer_msgs(){}
  345.  
  346.  
  347.         string Receptor::str() const{}
  348.  
  349. MAIN MAIN MAIN MAIN MAIN MAIN MAIN MAIN MAIN
  350.  
  351. #include "ListaPaquete.hpp"
  352. #include "Paquete.hpp"
  353. #include "Receptor.cpp"
  354.  
  355. using namespace std;
  356.  
  357. int main()
  358. {
  359.     Paquete p1("id1", 1, "Esto ");
  360.     Paquete p2("id1", 2, "es ");
  361.     Paquete p3("id1", 3, "una prueba");
  362.  
  363.     Paquete q1("id2", 1, "Estamos ");
  364.     Paquete q2("id2", 2, "a la ");
  365.     Paquete q3("id2", 3, "espera");
  366.  
  367.     cout << "Se reciben paquetes ..................." << endl;
  368.     Receptor tr;
  369.     tr.add_pack(p1);
  370.     tr.add_pack(q2);
  371.     tr.add_pack(p3);
  372.     tr.add_pack(q1);
  373.     tr.add_pack(p2);
  374.     tr.add_pack(q3);
  375.     cout << endl;
  376.  
  377.     cout << "Estado del receptor ..................." << endl;
  378.     cout << tr.str() << endl << endl ;
  379.  
  380.     cout << "Se extraen los mensajes del receptor..." << endl;
  381.     tr.extraer_msgs();
  382.     cout << endl;
  383.  
  384.     cout << "Estado del receptor ..................." << endl;
  385.     cout << tr.str() << endl;
  386.  
  387.     return 0;
  388. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement