utiliser du code LGPL

utiliser du code LGPL - C - Programmation

Marsh Posté le 03-04-2007 à 15:05:12    

Bonjour,
 
J'ai une jolie structure qui me sert de "tableau dynamique". Cette structure ne s'alloue pas un bloc mémoire pour stocker ses éléments mais plusieurs blocs afin d'éviter les problèmes de fragmentation.
 
Problème: je veux pouvoir faire un coup de qsort sur le tout mais je ne le peux pas, celui-ci travaillant avec un seul bloc.
Solution: pomper le code de qsort de la glibc pour l'adapter à ma structure "multi-blocs".
 
D'où ma question: est-il conforme avec la licence de réutiliser du code LGPL dans une autre lib LGPL?

Reply

Marsh Posté le 03-04-2007 à 15:05:12   

Reply

Marsh Posté le 03-04-2007 à 15:18:07    

si tu fais un copier/coller, faut mettre dans le comentaire d'où vient le code, si c'est juste de t'en inspirer, y'a pas de pb, rien à mettre de particulier...

Reply

Marsh Posté le 03-04-2007 à 15:21:58    

rufo a écrit :

si tu fais un copier/coller, faut mettre dans le comentaire d'où vient le code, si c'est juste de t'en inspirer, y'a pas de pb, rien à mettre de particulier...


 
Ce serait un gros copier/coller et quelques arrangements pour qu'il choppe les éléments où il faut. Si je vous suis bien, en mettant donc "blablabla code copié depuis la glibc, modifié pour blablabla", c'est en conformité avec la LGPL?

Reply

Marsh Posté le 03-04-2007 à 15:30:17    

oui.

Reply

Marsh Posté le 03-04-2007 à 15:30:56    

merci :)

Reply

Marsh Posté le 03-04-2007 à 16:45:50    

Si j'étais toi je me débrouillerait plutôt pour pouvoir utiliser le vrai qsort. Ca dépend de ce que tu veux faire mais il y a plusieurs solutions. L'une d'elles est de ne pas trier directement tes strutures, mais plutôt un tableau de pointeurs vers tes structures. Tu créé le tableau pour l'occasion, tu le trie, tu reconstruit ton tableau de structure en fonction de la liste tirée par qsort.

Reply

Marsh Posté le 03-04-2007 à 17:14:34    

Vous n'avez pas compris ce que je fais.
 
En gros, ma structure a cette tronche:
 
struct array_t {
  void *data;
  size_t elts;
  size_t blocs;
};
 
data pointe sur un tableau de pointeurs (chaque pointeur pointe sur un bloc mémoire), elts représente le nombre total d'éléments dans les blocs, et blocs est le nombre de blocs. On va dire qu'on a 1000 elts par bloc pour l'exemple. Pour accéder au xième elt, il me faut l'index du bloc qui le contient (n1) et l'index de l'elt dans le bloc (n2).
n1=x/1000;
n2=x%1000;
 
En clair, les elts de [x, x+1000[ sont dans le bloc d'index x. Comme ces blocs sont rangés dans un tableau de pointeurs, je ne peux pas utiliser l'implémentation traditionnelle de qsort. Simple, non? :D
 
Tout au mieux, je peux trier les éléments d'un bloc ce qui ne sert pas à grand chose. Je pourrais aussi tout copier dans une zone mémoire contigüe, faire le qsort et recopier le résultat dans ma structure. V'la le gachis (pour l'instant, j'utilise une implémentation "naïve" de qsort, ce qui est à peine mieux).


Message édité par docmaboul le 03-04-2007 à 17:15:15
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed