Dagal / DGL

Librairie C++ OpenGL
https://github.com/Dagal/DamierGL/wiki
0 stars 0 forks source link

CGLGarbage #13

Open Dagal opened 10 years ago

Dagal commented 10 years ago

Création d'un CGLGarbage collector. Cette collection n'est qu'un objet comme tout les autres mais qui liste l'intégralité des objets créé par la suite.

Je pense qu'il doit se trouver à l'intérieur de CGLObject sous forme de pointeur statique. Son travail consisterait à effacer tous les objets automatiquement en fin de programme et également de libérer la mémoire de ce qui n'est plus utilisé, soit sur demande, soit sur temps libre.

Le parcourt du temps libre prendrait pour commencer, le premier élément, le marque comme actif, puis regarde ses enfants un par un avec leur arborescence et les marquent tous comme actif. Ensuite, on parcourt le deuxième, etc.

Je n'aime pas trop ce procédé, je préfère commencer par le dernier qui a plus de chance d'être effacer, mais cela voudrais dire de regarder absolument tout l'arbre à chaque fois.

Chercher une solution intermédiaire…

Dagal commented 10 years ago

Je vais créer le garbage collector et l'inclure dans l'objet de base. Je ne sais pas encore si un sous objet peut être inclus dans un objet. Sinon, j'aviserai…

CGLGarbage dépend de CGLSpecial ou CGLObject.

Dagal commented 10 years ago

Finalement, je ne crée pas de classe CGLGarbage. Par contre, je vais utiliser un pointeur statique de CGLObject nommé garbage. Je vais créer une méthode static d'initialisation pour la mise en place. Il faudra certainement une méthode statique pour la destruction…

Dagal commented 10 years ago

Maintenant que c'est fait, il va falloir que notre garbage soit capable d'ajouter un nouvel élément lors d'un addObject à condition que l'objet en question ne soit pas déjà dans la liste. L'ajout systématique est très aisé, mais la condition implique une recherche dans l'objet lui même. Il faut donc créé une méthode dans CGLObject qui va parcourir ses enfants du premier degré pour voir si un pointeur vers un objet existe déjà. Nom de la méthode: bool CGLObject::isChild(CGLObject* obj)

Dagal commented 10 years ago

Mais pourquoi faire tout cela quand il est possible de l'ajouter directement à la création de l'objet… Forcément, il n'est pas encore dans la liste du garbage…

Dagal commented 10 years ago

Je garde tout de même le test d'appartenance, ça peut toujours servir.