(Event+Time).Variant Operators  2.3
Operators for Timed Discrete Event Systems in Dioids
poly.h
1 #ifndef __POLY_H__
2 #define __POLY_H__
3 
4 #include "gd.h"
5 
6 #define taille 1600
7 #define taille_max_polynome 128000 // size mx polynom
8 #define C_LIMIT_SIZE 128000 //size max polynom too
9 
10 //int forcage=0; definie dans vars.h
11 
12 namespace mmgd
13 {
14  void sort_gd(gd *, const int *);
15 
16  class poly {
17 
18 
19 
20  private:
21  gd *data; // pointeur sur des objets monomes
22  unsigned int n; // nombre d'��ents du polyn�e
23  unsigned int nblock; // nombre de blocks de (taille*sizeof(gd)) allou� au polyn�e
24  unsigned int simple; // vaut 1 lorsque le polyn�e est sous forme minimale
25 
26  void fail(char *); // pour les messages en cas de pb d'allocation
27  //void affecte(unsigned int , const gd* ,unsigned int propre); // affectation avec 1 vecteur de monome
28 
29  public:
30  poly(void); // constructeur 0 : poly= (+00,-00) epsilon
31  poly(const poly &); // constructuer 1 : serie initialisee avec un objet poly
32  poly(const gd&);
33  poly(long g, long d);
34  poly(unsigned int, gd *); // constructeur 2 : initialise avec 1 vecteur de monome
35  ~poly(void); // destructeur
36 
37 
38  poly& operator=(const poly &); // initialise avec un objet polynome
39 
40  poly& operator ()(long g, long d); //initialisation avec deux monomes
41 
42 
43 
44  void init(unsigned int, gd*, int); // initialise avec 1 vecteur de monomes
45 
46  poly& operator=(const gd& gd1); // initialise avec un monome cast monome->polynome
47  poly& init(long g, long d); // initialise 2 entiers cast monome->polynome
48 
49 
50 
51  void affecte(unsigned int, const gd*, unsigned int propre); // affectation avec 1 vecteur de monome
52 
53  gd& getpol(int i) const
54  {
55  return data[i];
56 
57  /*** version pour le d�eloppement
58  if(i<n) {
59  return data[i];
60  }
61  else {
62  std::cout<<"Erreur index polynome (see getpol()) \n";exit(1);}
63  *****/
64  } // pour acceder aux elements de data
65 
66 
67  unsigned int getn() const { return n; }
68  void setsimple() { simple = 1; }
69  gd * getdata() { return data; }
70  void popj(unsigned int j); // supprime l'��ent j
71  void pop(); // supprime le dernier ��ent du polynome
72  void add(const gd& m1); // ajoute un ��ent �la fin
73  void simpli(); // tri et simplification du polynome
74  void onlysimpli(); // simplification du polynome
75 
76  friend bool mycompgd( gd pr1, gd pr2);
77  friend int compgd(const void * p1, const void * p2);
78  void swapgd(gd& a, gd& b);
79 
80  int partitionner(gd *tab, int debut, int dernier, int pivot, int comp(const void *, const void*));
81  friend void qsort_gd(gd *adtab, int premier, int dernier, int comp(const void *, const void*));
82 
83  //void sort_gd(void);
84 
85  int operator==(const poly&);
86 
87  friend poly oplus(poly &, poly&); // somme de 2 polynomes, retourne un nouveau polynome
88 
89  friend poly oplus(gd&, gd&); // somme de deux monomes -> un polynome
90  friend poly oplus(poly&, gd&); // somme d'1 polynome et d'un monome
91  friend poly oplus(gd&, poly&); // somme d'un monome et d'1 polynome
92  friend poly oplus(poly &, poly&, poly&); // somme de 3 polynomes, retourne un nouveau polynome
93  friend poly oplus(poly &, poly&, poly&, poly&); // somme de 4 polynomes, retourne un nouveau polynome
94 
95  friend poly otimes(poly &poly1, poly &poly2); // produit de polynome
96  friend poly otimes(poly& poly1, gd& gd2); // produit d'un polynome par un monome
97  friend poly otimes(gd& gd1, poly& poly2); // produit d'un monome par un polynome
98 
99  friend poly inf(poly& poly1, poly& poly2); // inf de polynome
100  friend poly inf(poly& poly1, gd& gd2); // inf d'1 polynome et d'1 monome
101  friend poly inf(gd& gd1, poly& poly2); // inf d'1 monome et d'1 polynome
102 
103  friend poly frac(poly& poly1, gd& gd2); // residuation d'1 polynome par 1 monome
104  friend poly frac(poly& poly1, poly& poly2); //residuation de poly1/poly2
105  friend poly frac(gd& gd1, poly& poly2); //residuation d'un monome par un polynome
106 
107  friend poly prcaus(poly &);
108 
109 
110 
111 
112 
113  friend std::ostream& operator<<(std::ostream &, poly &); // surdefinition de <<
114  friend std::fstream& operator<<(std::fstream &, poly &); // surdefinition de << sur fichier
115 
116 
117  // Append from 17/04/2015, for Soraia
118  friend poly odot(const poly& poly1, const poly& poly2); // Hadamard de polynome
119  friend poly fracodotsharp(poly& poly1, poly& poly2); // residue Hadamard de polynome, retourne un nouveau polynome
120  // poly1 >> odot(result,poly2)
121  friend poly fracodotflat(poly& poly1, poly& poly2); // residue dual Hadamard de polynome, retourne un nouveau polynome
122  // poly1 << odot(result,poly2) Hypothese poly2>>poly1 sinon on retourne Top
123 
124 
125  };
126 
127 }//fin namespace mmgd
128 #endif
129 
Definition: poly.h:16
friend bool mycompgd(gd pr1, gd pr2)
Definition: poly.cpp:88
Definition: gd.h:13
friend int compgd(const void *p1, const void *p2)
Definition: poly.cpp:102
Definition: gd.h:47