summaryrefslogtreecommitdiff
path: root/src/format/symbol.c
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2020-04-09 22:23:49 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2020-04-09 22:23:49 (GMT)
commit5de93a90f20b9ce35d4799d521029f2fde5c6441 (patch)
treebf6cfdafe6d6cef07b561821b5b35d69bff3c60e /src/format/symbol.c
parentee138199fe0d7bcc114cfb7001e968c4738a8ce5 (diff)
Created extra flags for binary symbols.
Diffstat (limited to 'src/format/symbol.c')
-rw-r--r--src/format/symbol.c133
1 files changed, 130 insertions, 3 deletions
diff --git a/src/format/symbol.c b/src/format/symbol.c
index c10c46d..7d272ce 100644
--- a/src/format/symbol.c
+++ b/src/format/symbol.c
@@ -68,7 +68,7 @@ static void g_binary_symbol_compute_cursor(const GBinSymbol *, gint, size_t, siz
static int g_binary_symbol_contains_cursor(const GBinSymbol *, size_t, size_t, const GLineCursor *);
/* Renseigne sur les propriétés liées à un générateur. */
-static BufferLineFlags g_binary_symbol_get_flags(const GBinSymbol *, size_t, size_t);
+static BufferLineFlags g_binary_symbol_get_line_flags(const GBinSymbol *, size_t, size_t);
/* Imprime dans une ligne de rendu le contenu représenté. */
static void g_binary_symbol_print(GBinSymbol *, GBufferLine *, size_t, size_t, const GBinContent *);
@@ -149,7 +149,7 @@ static void g_binary_symbol_interface_init(GLineGeneratorInterface *iface)
iface->count = (linegen_count_lines_fc)g_binary_symbol_count_lines;
iface->compute = (linegen_compute_fc)g_binary_symbol_compute_cursor;
iface->contains = (linegen_contains_fc)g_binary_symbol_contains_cursor;
- iface->get_flags = (linegen_get_flags_fc)g_binary_symbol_get_flags;
+ iface->get_flags = (linegen_get_flags_fc)g_binary_symbol_get_line_flags;
iface->print = (linegen_print_fc)g_binary_symbol_print;
}
@@ -433,6 +433,133 @@ SymbolStatus g_binary_symbol_get_status(const GBinSymbol *symbol)
/******************************************************************************
* *
+* Paramètres : symbol = symbole à venir modifier. *
+* flag = drapeau d'information complémentaire à planter. *
+* *
+* Description : Ajoute une information complémentaire à un symbole. *
+* *
+* Retour : Bilan de l'opération. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+bool g_binary_symbol_set_flag(GBinSymbol *symbol, SymbolFlag flag)
+{
+ bool result; /* Bilan à retourner */
+ sym_obj_extra *extra; /* Données insérées à modifier */
+
+ extra = GET_BIN_SYMBOL_EXTRA(symbol);
+
+ g_bit_lock(&extra->lock, HOLE_LOCK_BIT);
+
+ result = !(extra->flags & flag);
+
+ extra->flags |= flag;
+
+ g_bit_unlock(&extra->lock, HOLE_LOCK_BIT);
+
+ return result;
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : symbol = symbole à venir modifier. *
+* flag = drapeau d'information complémentaire à planter. *
+* *
+* Description : Retire une information complémentaire à un symbole. *
+* *
+* Retour : Bilan de l'opération. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+bool g_binary_symbol_unset_flag(GBinSymbol *symbol, SymbolFlag flag)
+{
+ bool result; /* Bilan à retourner */
+ sym_obj_extra *extra; /* Données insérées à modifier */
+
+ extra = GET_BIN_SYMBOL_EXTRA(symbol);
+
+ g_bit_lock(&extra->lock, HOLE_LOCK_BIT);
+
+ result = (extra->flags & flag);
+
+ extra->flags &= ~flag;
+
+ g_bit_unlock(&extra->lock, HOLE_LOCK_BIT);
+
+ return result;
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : symbol = symbole à venir consulter. *
+* flag = drapeau d'information à rechercher. *
+* *
+* Description : Détermine si un symbole possède un fanion particulier. *
+* *
+* Retour : Bilan de la détection. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+bool g_binary_symbol_has_flag(const GBinSymbol *symbol, SymbolFlag flag)
+{
+ bool result; /* Bilan à retourner */
+ sym_obj_extra *extra; /* Données insérées à modifier */
+
+ extra = GET_BIN_SYMBOL_EXTRA(symbol);
+
+ g_bit_lock(&extra->lock, HOLE_LOCK_BIT);
+
+ result = (extra->flags & flag);
+
+ g_bit_unlock(&extra->lock, HOLE_LOCK_BIT);
+
+ return result;
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : symbol = symbole à venir consulter. *
+* *
+* Description : Fournit les particularités du symbole. *
+* *
+* Retour : Somme de tous les fanions associés au symbole. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+SymbolFlag g_binary_symbol_get_flags(const GBinSymbol *symbol)
+{
+ SymbolFlag result; /* Fanions à retourner */
+ sym_obj_extra *extra; /* Données insérées à modifier */
+
+ extra = GET_BIN_SYMBOL_EXTRA(symbol);
+
+ g_bit_lock(&extra->lock, HOLE_LOCK_BIT);
+
+ result = extra->flags;
+
+ g_bit_unlock(&extra->lock, HOLE_LOCK_BIT);
+
+ return result;
+
+}
+
+
+/******************************************************************************
+* *
* Paramètres : symbol = symbole à venir consulter. *
* *
* Description : Fournit une étiquette pour viser un symbole. *
@@ -626,7 +753,7 @@ static int g_binary_symbol_contains_cursor(const GBinSymbol *symbol, size_t inde
* *
******************************************************************************/
-static BufferLineFlags g_binary_symbol_get_flags(const GBinSymbol *symbol, size_t index, size_t repeat)
+static BufferLineFlags g_binary_symbol_get_line_flags(const GBinSymbol *symbol, size_t index, size_t repeat)
{
return BLF_IS_LABEL;