Godot: Exposer une double liste chaînée au script

Créé le 26 nov. 2016  ·  3Commentaires  ·  Source: godotengine/godot

Il y a une double liste chaînée dans le code source de godots ( core/list.h ).
Ce serait bien si cela était exposé car il y a des cas où une liste à double chaînage fonctionne bien mieux en tant que vecteur.
Surtout lorsqu'il s'agit d'insérer/retirer des éléments à n'importe quelle position, à l'exception de la fin.

Je pourrais travailler là-dessus, mais je ne sais pas comment gérer le verrouillage et l'enregistrement (bien que je puisse essayer de refléter le comportement de la classe Array).
Exposer la liste en groset liste:: Element devrait faire l'affaire, je suppose.?
L'implémenter comme itérable devrait également fonctionner de la même manière que Array le fait.

De plus (et si demandé, je pourrais ouvrir un autre numéro pour cela) exposer le core/ring_buffer.h en tant que file d'attente serait également bien pour les besoins de la file d'attente.
Il devrait mieux fonctionner en tant que file d'attente en utilisant une double liste chaînée (et par définition mieux en tant que liste vectorielle) avec la limitation qu'il a une taille "fixe" et qu'il alloue potentiellement de la mémoire inutilisée ofc.
Mais il y a des cas où exactement ce comportement est nécessaire.

archived feature proposal core gdscript

Commentaire le plus utile

Toujours reproductible/pertinent dans le master 3.1 9e7cee2 : une telle structure de données n'est pas encore exposée.

Tous les 3 commentaires

Toujours reproductible/pertinent dans le master 3.1 9e7cee2 : une telle structure de données n'est pas encore exposée.

J'étais sur le point de publier sur reddit pour demander s'il existe une implémentation de liste liée appropriée que je peux utiliser.

J'ai besoin d'une liste FIFO rapide et le tableau ne fait pas le travail.

Je viens d'écrire ceci en tant que remplacement de tableau et j'ai obtenu des améliorations de vitesse significatives :

extends Node

var front_space = 0
var array_len = 0
var array_data = []

func push_back(val):
    if array_data.size() < front_space+array_len+1:
        enlarge()
    array_len += 1
    array_data[front_space+array_len-1] = val

func pop_back():
    if array_data.size() > array_len*8:
        reseat()
    array_len -= 1
    return array_data[front_space+array_len]

func back():
    return array_data[front_space+array_len-1]

func pop_front():
    if front_space > array_len:
        reseat()
    if array_data.size() > array_len*8:
        reseat()
    front_space += 1
    array_len -= 1
    return array_data[front_space-1]

func front():
    return array_data[front_space]

func size():
    return array_len

func enlarge():
    array_data.resize(front_space+array_len*2+1)

func reseat():
    var new_array = []
    new_array.resize(array_len*2)
    for i in range(array_len):
        new_array[i] = array_data[i+front_space]
    front_space = 0
    array_data = new_array

func print_debug():
    print("front: ", front_space,", len: ",arr

Les propositions de fonctionnalités et d'améliorations pour le moteur Godot sont maintenant discutées et examinées dans un outil de suivi des problèmes dédié aux propositions d'amélioration Godot (GIP) ( godotengine/godot-proposals ). Le suivi GIP dispose d'un modèle de problème détaillé conçu pour que les propositions incluent toutes les informations pertinentes pour démarrer une discussion productive et aider la communauté à évaluer la validité de la proposition pour le moteur.

Le tracker principal ( godotengine/godot ) est désormais uniquement dédié aux rapports de bogues et aux Pull Requests, permettant aux contributeurs de mieux se concentrer sur le travail de correction de bogues. Par conséquent, nous fermons maintenant toutes les anciennes propositions de fonctionnalités sur le suivi des problèmes principaux.

Si vous êtes intéressé par cette proposition de fonctionnalité, veuillez ouvrir une nouvelle proposition sur le tracker GIP en suivant le modèle de problème donné (après avoir vérifié qu'il n'existe pas déjà). Assurez-vous de faire référence à ce problème clos s'il comprend une discussion pertinente (que vous êtes également encouragé à résumer dans la nouvelle proposition). Merci d'avance!

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

timoschwarzer picture timoschwarzer  ·  3Commentaires

Zephilinox picture Zephilinox  ·  3Commentaires

gonzo191 picture gonzo191  ·  3Commentaires

n-pigeon picture n-pigeon  ·  3Commentaires

RebelliousX picture RebelliousX  ·  3Commentaires