source: trunk/src/queue.h @ 5

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

Réorganisation des dossiers

déplacement des fichiers source dans le sous dossier ./src
déplacement de systemc dans le sous-dossier ./lib

File size: 2.4 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
67    if (elements.size() > 1) {
68        typename std::set<T>::iterator it;
69        it = elements.find(element);
70        if (it != elements.end())
71            elements.erase(it);
72        else
73            std::cerr << "removal ignored" << std::endl;
74    }
75
76//    if (elements.size() > 0) {
77//        std::cout << "QUEUE : j'efface l'element : " << element << std::endl;
78//        elements.erase(element);
79//    } else {
80//        std::cerr << "removal ignored" << std::endl;
81//    }
82}
83
84template < typename T > void Queue<T>::print() {
85    typename std::set<T>::iterator it;
86
87    cout << "\t" << "QUEUE begin" << endl;
88    for (it = elements.begin(); it != elements.end(); it++)
89    {
90        cout << "\t\t" << "element : " << *it << endl;
91    }
92
93    cout << "\t" << "QUEUE end" << endl;
94}
95
96#endif
Note: See TracBrowser for help on using the repository browser.