/* Chrysalide - Outil d'analyse de fichiers binaires * buffercache-int.h - définitions internes d'affichage à la demande d'un ensemble de lignes * * Copyright (C) 2020 Cyrille Bagard * * This file is part of Chrysalide. * * Chrysalide is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * Chrysalide is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Chrysalide. If not, see . */ #ifndef _GLIBEXT_BUFFERCACHE_INT_H #define _GLIBEXT_BUFFERCACHE_INT_H #include "buffercache.h" /* --------------------- FONCTIONS AUXILIAIRES DE MANIPULATIONS --------------------- */ /* Informations rattachées à la génération d'une ligne */ typedef struct _generator_link_t { GTokenGenerator *instance; /* Fournisseur de contenu */ size_t repeat; /* Compteur de successions */ } generator_link_t; /* Suivi interne de l'état d'une ligne */ typedef struct _cache_info_t { union { generator_link_t generator; /* Générateur unique */ generator_link_t *generators; /* Liste de générateurs */ }; size_t count; /* Taille de cette liste */ GBufferLine *line; /* Ligne en place ou NULL */ BufferLineFlags extra_flags; /* Propriétés supplémentaires */ } cache_info_t; /* -------------------------- TAMPON POUR CODE DESASSEMBLE -------------------------- */ /* Tampon pour gestion de lignes optimisée (instance) */ struct _GBufferCache { GObject parent; /* A laisser en premier */ size_t opt_count; /* Qté de colonnes en option */ size_t reg_count; /* Nombre de colonnes normales */ #ifndef NDEBUG size_t col_count; /* Nombre maximum de colonnes */ #endif #if 0 GBinContent *content; /* Contenu binaire global */ #ifdef INCLUDE_GTK_SUPPORT GWidthTracker *tracker; /* Suivi des largeurs */ #endif #endif cache_info_t *lines; /* Liste des lignes intégrées */ size_t count; /* Quantité en cache */ size_t used; /* Quantité utilisée */ GRWLock access; /* Verrou de protection */ }; /* Tampon pour gestion de lignes optimisée (classe) */ struct _GBufferCacheClass { GObjectClass parent; /* A laisser en premier */ /* Signaux */ void (* size_changed) (GBufferCache *, bool, size_t, size_t); #if 0 void (* line_updated) (GBufferCache *, size_t); #endif }; /* Met en place un nouveau tampon pour lignes quelconques. */ bool g_buffer_cache_create(GBufferCache *, size_t, size_t); #endif /* _GLIBEXT_BUFFERCACHE_INT_H */