Précédent   Forum du club des développeurs et IT Pro > Autres langages > Autres langages > Ada
Ada Forum d'entraide sur la programmation en langage Ada
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 11/11/2012, 14h26   #1
jovalise
Membre éclairé
 
Inscription : juin 2006
Messages : 767
Détails du profil
Informations personnelles :
Âge : 43

Informations forums :
Inscription : juin 2006
Messages : 767
Points : 328
Points : 328
Par défaut Passer un tableau contraint en parametre générique de paquetage.

Bonjour.
Je souhaite donner à un paquet générique un type tableau contraint.
Comment le spécifier s'il vous plaît. Si c'est possible néanmoins.
Merci.
__________________
Mon développement
jovalise est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/11/2012, 16h21   #2
jovalise
Membre éclairé
 
Inscription : juin 2006
Messages : 767
Détails du profil
Informations personnelles :
Âge : 43

Informations forums :
Inscription : juin 2006
Messages : 767
Points : 328
Points : 328
Au lieu de passer le type tableau je passe l'index_type du tableau.
__________________
Mon développement
jovalise est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/11/2012, 08h43   #3
Blackknight
Membre confirmé
 
Avatar de Blackknight
 
Homme Frédéric Praca
Ingénieur développement logiciels
Inscription : février 2009
Messages : 172
Détails du profil
Informations personnelles :
Nom : Homme Frédéric Praca
Âge : 39
Localisation : France, Seine Maritime (Haute Normandie)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2009
Messages : 172
Points : 292
Points : 292
Envoyer un message via AIM à Blackknight Envoyer un message via MSN à Blackknight
Je pense que je n'ai pas dû bien comprendre la question parce que sinon, la réponse se trouve dans l'ARM dans l'exemple ligne 19 de cette page.
Pourrais-tu préciser ?
Blackknight est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/11/2012, 11h29   #4
jovalise
Membre éclairé
 
Inscription : juin 2006
Messages : 767
Détails du profil
Informations personnelles :
Âge : 43

Informations forums :
Inscription : juin 2006
Messages : 767
Points : 328
Points : 328
Citation:
Envoyé par Blackknight Voir le message
Je pense que je n'ai pas dû bien comprendre la question parce que sinon, la réponse se trouve dans l'ARM dans l'exemple ligne 19 de cette page.
Pourrais-tu préciser ?
Je voulais passer un type de tableau contraint qui soit un sous type d'un tableau non contraint.

J'avais regarder la page en question mais j'ai pas trouvé mon bonheur, et je comprend rien à l'english.
__________________
Mon développement
jovalise est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/11/2012, 13h39   #5
Blackknight
Membre confirmé
 
Avatar de Blackknight
 
Homme Frédéric Praca
Ingénieur développement logiciels
Inscription : février 2009
Messages : 172
Détails du profil
Informations personnelles :
Nom : Homme Frédéric Praca
Âge : 39
Localisation : France, Seine Maritime (Haute Normandie)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2009
Messages : 172
Points : 292
Points : 292
Envoyer un message via AIM à Blackknight Envoyer un message via MSN à Blackknight
Et bien dans ce cas, qu'est-ce qui t'empêche de faire une variation de l'exemple de l'ARM, du style
Code :
1
2
3
4
5
6
generic
   type Item  is private;                      -- formal type
   type Index is (<>);                         -- formal type
   type Row   is new mon_Tab(1..35);    -- avec mon_Tab non contraint
   with function "<"(X, Y : Item) return Boolean;    -- formal subprogram
Blackknight est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/11/2012, 14h54   #6
jovalise
Membre éclairé
 
Inscription : juin 2006
Messages : 767
Détails du profil
Informations personnelles :
Âge : 43

Informations forums :
Inscription : juin 2006
Messages : 767
Points : 328
Points : 328
Citation:
Envoyé par Blackknight Voir le message
Et bien dans ce cas, qu'est-ce qui t'empêche de faire une variation de l'exemple de l'ARM, du style
Code :
1
2
3
4
5
6
generic
   type Item  is private;                      -- formal type
   type Index is (<>);                         -- formal type
   type Row   is new mon_Tab(1..35);    -- avec mon_Tab non contraint
   with function "<"(X, Y : Item) return Boolean;    -- formal subprogram
Je ne connais pas la contrainte.

Je pensais pourvoir faire

generic
type Tab_Contraint is new Tab_non_contraint(<>)

Mais ça passe pas.
__________________
Mon développement
jovalise est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/11/2012, 15h40   #7
Blackknight
Membre confirmé
 
Avatar de Blackknight
 
Homme Frédéric Praca
Ingénieur développement logiciels
Inscription : février 2009
Messages : 172
Détails du profil
Informations personnelles :
Nom : Homme Frédéric Praca
Âge : 39
Localisation : France, Seine Maritime (Haute Normandie)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2009
Messages : 172
Points : 292
Points : 292
Envoyer un message via AIM à Blackknight Envoyer un message via MSN à Blackknight
Et ça ne marche pas ?
Parce que l'exemple de l'ARM que je t'ai fourni utilise bien des tableaux non contraints.
D'ailleurs, qu'est-ce qui ne marche pas ? Tu as un message d'erreur à la compilation ?
Blackknight est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/11/2012, 15h56   #8
jovalise
Membre éclairé
 
Inscription : juin 2006
Messages : 767
Détails du profil
Informations personnelles :
Âge : 43

Informations forums :
Inscription : juin 2006
Messages : 767
Points : 328
Points : 328
Citation:
Envoyé par Blackknight Voir le message
Et ça ne marche pas ?
Parce que l'exemple de l'ARM que je t'ai fourni utilise bien des tableaux non contraints.
D'ailleurs, qu'est-ce qui ne marche pas ? Tu as un message d'erreur à la compilation ?
Oui, j'ai une erreur à la compilation, Gnat dit que le tableau (que je passe en paramètre) doit être non contraint.
__________________
Mon développement
jovalise est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/11/2012, 15h59   #9
Blackknight
Membre confirmé
 
Avatar de Blackknight
 
Homme Frédéric Praca
Ingénieur développement logiciels
Inscription : février 2009
Messages : 172
Détails du profil
Informations personnelles :
Nom : Homme Frédéric Praca
Âge : 39
Localisation : France, Seine Maritime (Haute Normandie)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2009
Messages : 172
Points : 292
Points : 292
Envoyer un message via AIM à Blackknight Envoyer un message via MSN à Blackknight
Pourrais-tu nous fournir un petit code qui illustre ton problème ?
As-tu un problème dans la déclaration du générique ou à son instanciation ?
Blackknight est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/11/2012, 16h12   #10
jovalise
Membre éclairé
 
Inscription : juin 2006
Messages : 767
Détails du profil
Informations personnelles :
Âge : 43

Informations forums :
Inscription : juin 2006
Messages : 767
Points : 328
Points : 328
Bon, je dois tout ré-ecrire puisque j'ai fait autrement (bien que ça ne m'aille pas).
Bref.

D'abord j'ai un paquet Q.Data dans lequel je déclare un type sentence_type :
Code ada :
1
2
3
package Q.Data is
   type sentence_type is array (value_type range <>) of note_type;
En suite je veux passer en paramètre à un paquet appelé Q.Data.Neural un type tableau contraint sous type de sentence_type. Que je ne sais pas déclarer.

En suite je voudrais pouvoir écrire :
Code ada :
1
2
3
subtype Lead_Sentence is Sentence_type( lead_value_type);
package Neural_Lead is new Q.Data.Neural (Lead_Sentence);
__________________
Mon développement
jovalise est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/11/2012, 00h21   #11
Sigurd9
Nouveau Membre du Club
 
Homme
Enseignant
Inscription : avril 2012
Messages : 26
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Enseignant
Secteur : Enseignement

Informations forums :
Inscription : avril 2012
Messages : 26
Points : 39
Points : 39
Un tableau doit être indexé par un type discret. Le type générique utilisé pour l'indexation doit être défini à l'aide du diamant :

Code :
1
2
3
4
5
package Q.Data is
generic
   type note_type is private ; 
   type value_type is <> ;  --indique que value_type est de type discret
   type sentence_type is array (value_type) of note_type;
permet de contraindre les tableaux à l'instanciation du package. Sinon, pour les contraindre à la déclaration :

Code :
1
2
3
4
5
package Q.Data is
generic
   type note_type is private ; 
   type value_type is <> ;  --indique que value_type est de type discret
   type sentence_type is array (value_type range <>) of note_type;
Pour l'instanciation :

Code :
1
2
3
4
5
type T_valeurs is ...
type T_indices is integer range 1..10 ; 
type T_Tableau is array(T_indices) of T_Valeurs ; 

package P_Pack is new Q.Data(T_Valeurs, T_indices, T_Tableau) ;
Sigurd9 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/11/2012, 01h24   #12
jovalise
Membre éclairé
 
Inscription : juin 2006
Messages : 767
Détails du profil
Informations personnelles :
Âge : 43

Informations forums :
Inscription : juin 2006
Messages : 767
Points : 328
Points : 328
Citation:
Envoyé par Sigurd9 Voir le message
Un tableau doit être indexé par un type discret. Le type générique utilisé pour l'indexation doit être défini à l'aide du diamant :

Code :
1
2
3
4
5
package Q.Data is
generic
   type note_type is private ; 
   type value_type is <> ;  --indique que value_type est de type discret
   type sentence_type is array (value_type) of note_type;
permet de contraindre les tableaux à l'instanciation du package. Sinon, pour les contraindre à la déclaration :

Code :
1
2
3
4
5
package Q.Data is
generic
   type note_type is private ; 
   type value_type is <> ;  --indique que value_type est de type discret
   type sentence_type is array (value_type range <>) of note_type;
Pour l'instanciation :

Code :
1
2
3
4
5
type T_valeurs is ...
type T_indices is integer range 1..10 ; 
type T_Tableau is array(T_indices) of T_Valeurs ; 

package P_Pack is new Q.Data(T_Valeurs, T_indices, T_Tableau) ;
Ben oui, mais c'est pas ce que je veux...
__________________
Mon développement
jovalise est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/11/2012, 14h04   #13
Blackknight
Membre confirmé
 
Avatar de Blackknight
 
Homme Frédéric Praca
Ingénieur développement logiciels
Inscription : février 2009
Messages : 172
Détails du profil
Informations personnelles :
Nom : Homme Frédéric Praca
Âge : 39
Localisation : France, Seine Maritime (Haute Normandie)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2009
Messages : 172
Points : 292
Points : 292
Envoyer un message via AIM à Blackknight Envoyer un message via MSN à Blackknight
Alors j'ai fini par trouver grâce à la page suivante de quoi faire un bout de code qui me semble répondre au problème.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
package Types is
   -- Déclaration d'un type Tableau non contraint
   type Mon_Tab is array(Positive range <>) of Integer;
   
end Types;
package body Le_Gen is
   function Length(Tab : NewTab) return Natural is
   begin
      return Tab'Length;
   end Length;
end Le_Gen;
with Types; use Types;

generic
   type NewTab (<>) is new Mon_Tab;
package Le_Gen is
   function Length(Tab : NewTab) return Natural;
end Le_Gen;
     
with Ada.Text_Io; use Ada.Text_Io;
with Types; use Types;
with Le_Gen;

procedure Test_Gen is
   
   -- intanciation du nouveau type de tableau
   type My_New_Tab is new Mon_Tab(1..25);
   -- intanciation du générique
   package My_Gen is new Le_Gen(My_New_Tab);
   
   Toto : My_New_Tab := (others => 12);
   
begin
   Put_Line("Longueur : " & Natural'Image(My_Gen.Length(Toto)));
end Test_Gen;
Comme d'habitude, un coup de gnatchop pour regénérer l'ensemble des fichiers et il n'y a plus qu'à tester.
En gros, la notation
Code :
type NewTab (<>) is new Mon_Tab;
permet de préciser que l'on veut tout type dérivé du type parent précisé.
Blackknight est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/11/2012, 14h15   #14
jovalise
Membre éclairé
 
Inscription : juin 2006
Messages : 767
Détails du profil
Informations personnelles :
Âge : 43

Informations forums :
Inscription : juin 2006
Messages : 767
Points : 328
Points : 328
Citation:
Envoyé par Blackknight Voir le message
En gros, la notation
Code :
type NewTab (<>) is new Mon_Tab;
permet de préciser que l'on veut tout type dérivé du type parent précisé.
Merci blackknight, ça me paraissait bizarre que ce soit pas faisable aussi.
Il me semble avoir testé un truc dans le genre pourtant.

Je re- testerai à l'occase.
Merci en tout cas.
__________________
Mon développement
jovalise est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 13/11/2012, 14h43   #15
Blackknight
Membre confirmé
 
Avatar de Blackknight
 
Homme Frédéric Praca
Ingénieur développement logiciels
Inscription : février 2009
Messages : 172
Détails du profil
Informations personnelles :
Nom : Homme Frédéric Praca
Âge : 39
Localisation : France, Seine Maritime (Haute Normandie)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2009
Messages : 172
Points : 292
Points : 292
Envoyer un message via AIM à Blackknight Envoyer un message via MSN à Blackknight
Bon, ceci dit, ça ne force pas l'instanciation avec un type contraint.
Blackknight est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 14h56.


 
 
 
 
Partenaires

Hébergement Web