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

Lazarus Pascal Discussion :

Migration unités contnrs vers generics.collections et defaults [Lazarus]


Sujet :

Lazarus Pascal

  1. #1
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    309
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 309
    Par défaut Migration unités contnrs vers generics.collections et defaults
    Bonjour.

    Je viens de migrer une appli avec plein de classes de type TObjectList (unité Contnrs) vers TObjectDictionary<integer, TMyObject> (unité Generics.Collections)
    Je ne regrette pas cette migration sur le plan des performances, un traitement récursif avec 5000 objets qui durait 1m30 s'exécute maintenant en 2s mais...

    1) Problème numéro 1 : je me retrouve avec plein de conseils et warnings sur ces deux unités generics (qui me font dire que mon code n'est pas parfait mais les références ne sont pas sur mes unités).

    Nom : Pb 1.png
Affichages : 90
Taille : 79,7 Ko

    Le fichier generic.dictionaries.inc n'est pas accessible bien que j'aie vérifié qu'il se trouve à plusieurs endroits dans les répertoires liés au package

    2) Problème numéro 2. Dans quelques rares cas, j'ai besoin de trier une liste.
    J'utilise donc à la place d'un TObjectDictionary un un TList<TObject> et je souhaite trier cette liste selon une propriété de l'objet
    Avant, pour les tList, il suffisait de faire quelque chose de ce type : self.Sort(@ComparePtrPropriété); avec (de façon schématique)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function ComparePtrPropriété(Objet1, Objet2 : Pointer) : integer;
    begin
    if tObjet(Objet1).Propriété<tObjet(Objet2).Propriété then
      result := -1
    else if tObjet(Objet1).Propriété>tObjet(Objet2).Propriété then
      result := 1 
    else result := 0
    On trouve quantité d'exemples sur le net avec cette ancienne formulation mais pas d'exemples simples avec les TList de cette unité Generics, donc si quelqu'un a eu à faire la même chose, je suis preneur d'un exemple !

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    309
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 309
    Par défaut
    Pour le tri, solution trouvée grace à des forums anglophones. Je la partage si ça peut aider d'autres :
    Remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function ComparePtrPropriété(Objet1, Objet2 : Pointer) : integer;
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function ComparePtrPropriété(constref Objet1, Objet2 : TMonObjet) : integer;
    L'appel se fait par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    self.Sort(specialize TComparer<TMonObjet>.construct(@ComparePtrPropriété));
    C'est pas quand même très intuitif, tout ça...

    Pour les résultats de compilation, je suis allé chercher le fichier .inc là où il se trouvait mais je suis preneur d'une astuce pour savoir si on peut désactiver ces messages (pas à l'échelle du projet mais de l'unité) ou si des personnes ont pu corriger leur code pour réduire ces avertissements et conseils

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    309
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 309
    Par défaut
    Pour le pb n°1, clic droit sur le message exotique affiché dans l'onglet Messages lors de la compilation puis menu 'Cacher avec l'option du projet -vm' suivi d'un chiffre.
    On enlève uniquement la catégorie du message en question (avec le risque qu'on ne les voit plus sur son propre code) mais ça fera l'affaire...

  4. #4
    Membre chevronné Avatar de der§en
    Homme Profil pro
    Chambord
    Inscrit en
    Septembre 2005
    Messages
    1 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Chambord
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 272
    Par défaut
    Je ne connaissait pas le mot : constref, il fait quoi ?

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    309
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 309
    Par défaut
    Moi non plus...
    Je me suis contenté de reprendre un post mais ce lien : https://wiki.freepascal.org/Constref donne plus d'information.
    On connaît le passage par valeur et par référence, je pense que c'est un équivalent au niveau des constantes.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Lazarus] Migrer de uutlGenerics vers Generics.Collections
    Par der§en dans le forum Lazarus
    Réponses: 2
    Dernier message: 17/05/2025, 17h04
  2. [VB.NET] Conseil migration d'ADO vers ADO.NET
    Par daner06 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 02/12/2004, 09h57
  3. [Forms]migration forms 6 vers forms 8
    Par anthonychery dans le forum Oracle
    Réponses: 7
    Dernier message: 17/11/2004, 18h54
  4. Demande de conseil pour migration de lignes vers colonnes
    Par ririd dans le forum Administration
    Réponses: 6
    Dernier message: 04/11/2004, 18h02
  5. [SYBASE] migration ASE12.0 vers ASE12.5
    Par sybase dans le forum Sybase
    Réponses: 1
    Dernier message: 25/10/2004, 16h53

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