IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Ada Discussion :

Passer un tableau contraint en parametre générique de paquetage.


Sujet :

Ada

  1. #1
    Invité
    Invité(e)
    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.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Au lieu de passer le type tableau je passe l'index_type du tableau.

  3. #3
    Membre averti Avatar de Blackknight
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2009
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    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 : 214
    Points : 383
    Points
    383
    Par défaut
    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 ?

  4. #4
    Invité
    Invité(e)
    Par défaut
    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.

  5. #5
    Membre averti Avatar de Blackknight
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2009
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    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 : 214
    Points : 383
    Points
    383
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  6. #6
    Invité
    Invité(e)
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  7. #7
    Membre averti Avatar de Blackknight
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2009
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    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 : 214
    Points : 383
    Points
    383
    Par défaut
    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 ?

  8. #8
    Invité
    Invité(e)
    Par défaut
    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.

  9. #9
    Membre averti Avatar de Blackknight
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2009
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    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 : 214
    Points : 383
    Points
    383
    Par défaut
    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 ?

  10. #10
    Invité
    Invité(e)
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    subtype Lead_Sentence is Sentence_type( lead_value_type);
    package Neural_Lead is new Q.Data.Neural (Lead_Sentence);

  11. #11
    Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2012
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2012
    Messages : 29
    Points : 49
    Points
    49
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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) ;

  12. #12
    Invité
    Invité(e)
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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...

  13. #13
    Membre averti Avatar de Blackknight
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2009
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    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 : 214
    Points : 383
    Points
    383
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    type NewTab (<>) is new Mon_Tab;
    permet de préciser que l'on veut tout type dérivé du type parent précisé.

  14. #14
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Blackknight Voir le message
    En gros, la notation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  15. #15
    Membre averti Avatar de Blackknight
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2009
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    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 : 214
    Points : 383
    Points
    383
    Par défaut
    Bon, ceci dit, ça ne force pas l'instanciation avec un type contraint.

Discussions similaires

  1. passer un tableau php en parametre d'une fonction js
    Par maxwel56 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 21/05/2012, 17h51
  2. Réponses: 2
    Dernier message: 08/01/2012, 22h56
  3. [Tableaux] Passer un tableau en paramètre de fonction
    Par digwele dans le forum Langage
    Réponses: 7
    Dernier message: 20/05/2007, 11h57
  4. Passer un tableau en parametre dans une fonction js
    Par hellmaster78 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 19/06/2005, 15h35
  5. passer un tableau dynamique en parametre...
    Par annecyrond dans le forum Langage
    Réponses: 5
    Dernier message: 07/03/2003, 10h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo