source: trunk/src/queue.h

Last change on this file was 16, checked in by guillaumeb, 15 years ago

localisation du problème

File size: 2.5 KB
Line 
1#ifndef QUEUE_H_
2#define QUEUE_H_
3
4#include <set>
5#include "raw_address.h"
6#include "util.h"
7#include "queue.h"
8#include <iostream>
9
10/*
11 * Ceci est une simple file d'attente pour les requêtes de données qui partent
12 * du processeur.
13 *
14 * Les données sont supprimées de cette file dès qu'elles ont été chargées dans
15 * le processeur. La taille de cette file est fixe. Si un élément est ajouté
16 * alors qu'il dépasse la taille, il ne sera pas inséré.  Néanmoins, un message
17 * devrait s'afficher sur la console.
18 *
19 * Le stockage interne est un arbre binaire rouge-noir qui permet insertion et
20 * suppression en O(log n) de la STL.
21 *
22 * Note: si les élements stockés ne sont plus des entiers, il faudra
23 * probablement ajouter une fonction pour comparer les elements afin que set
24 * puisse les trier.
25 */
26
27template <typename T> 
28class Queue {
29    private:
30        unsigned int max_size;
31        std::set<T> elements;
32
33    public:
34        Queue(int max_size) {
35            this->max_size = max_size;
36        }
37
38        void insert(T &element);
39        void remove(T &element);
40        bool is_full();
41        bool is_empty();
42        void print();
43};
44
45using namespace std;
46
47template < typename T > void Queue<T>::insert(T &element) {
48    if (elements.size() <= max_size) {   
49        elements.insert(element);
50    } else {
51        std::cerr << "insertion ignored" << std::endl;
52    }
53}
54
55template <typename T> bool Queue<T>::is_full() {
56    return (elements.size() == max_size);
57}
58
59template < typename T >bool Queue<T>::is_empty() {
60    return (elements.empty());
61}
62
63template < typename T > void Queue<T>::remove(T &element) {
64   
65    cout << "\t" << "QUEUE suppression de " << element <<  endl;
66    int num = elements.erase(element);
67    cout << "nombre d'elements supprimes = " << num << endl;
68/*
69    if (elements.size() > 1) {
70        typename std::set<T>::iterator it;
71        it = elements.find(element);
72        if (it != elements.end())
73            elements.erase(element);
74        else
75            std::cerr << "removal ignored" << std::endl;
76    }
77*/
78//    if (elements.size() > 0) {
79//        std::cout << "QUEUE : j'efface l'element : " << element << std::endl;
80//        elements.erase(element);
81//    } else {
82//        std::cerr << "removal ignored" << std::endl;
83//    }
84}
85
86template < typename T > void Queue<T>::print() {
87    typename std::set<T>::iterator it;
88
89    cout << "\t" << "QUEUE begin" << endl;
90    for (it = elements.begin(); it != elements.end(); it++)
91    {
92        cout << "\t\t" << "element : " << *it << endl;
93    }
94
95    cout << "\t" << "QUEUE end" << endl;
96}
97
98#endif
Note: See TracBrowser for help on using the repository browser.