#include "common.h"Vai al codice sorgente di questo file.
Strutture dati | |
| struct | thread |
| struct | lista |
Definizioni | |
| #define | EMPTY 0 |
| #define | FULL THREAD_MAX |
Tipi enumerati (enum) | |
| enum | boolean { false, true } |
Funzioni | |
| void | inizializza (struct lista *stack) |
| int | ins_new_elem (channel_t sk_cl, struct lista *stack) |
| channel_t | estrazione (struct lista *stack) |
| boolean | full (const struct lista *stack) |
| int | rimuovi (channel_t sk_cl, struct lista *s) |
| channel_t | leggi_sk_cl (struct lista *stack) |
This program is free software; you can redistribuite it and/or modify it under the terms of the GNU/General Pubblic License as published the Free software Foundation; either version 2 of the License, or (at your opinion) any later version.
Definizione nel file lista.h.
| #define FULL THREAD_MAX |
| enum boolean |
| void inizializza | ( | struct lista * | stack | ) |
Funzione che inizializza lo stack
| *stack |
Definizione alla linea 15 del file lista.c.
00015 { 00016 stack->num_threads=0; /* azzeramento del contatore */ 00017 stack->top_elem=NULL; /* azzeramento del puntatore */ 00018 }
Inserisce un elemento nello stack
| sk_cl | ||
| *stack |
Definizione alla linea 20 del file lista.c.
00020 { 00021 struct thread *new = NULL; 00022 00023 if (!(new = (struct thread *) malloc(sizeof(struct thread)))){ 00024 errore(__FILE__,__LINE__, 00025 "Errore nel creare un nuovo elemento (STACK)",errno); 00026 return errno; 00027 } 00028 new->sk_cl = sk_cl; 00029 new->next = s->top_elem;/* fa puntare il nuovo elemento al primo della lista */ 00030 s->top_elem = new; /* inserisce il nuovo elemento in testa alla lista */ 00031 s->num_threads++; /* incrementa il valore del contatore */ 00032 return 0; 00033 }
Estrae l'elemento in cima allo stack
| *stack |
Definizione alla linea 35 del file lista.c.
00035 { 00036 int sk_cl = -1; 00037 /* Puntatore temporaneo che puntera' 00038 * all'area di memoria da eliminare */ 00039 struct thread *tmp; 00040 00041 /* Se la lista non e' vuota... */ 00042 if (s->top_elem){ 00043 sk_cl = s->top_elem->sk_cl; 00044 /* Ora tmp punta all'area di memoria dell'elemento in cima alla lista */ 00045 tmp = s->top_elem; 00046 /* Il secondo elemento della lista diventa il primo, 00047 * vengono scambiati cioe' gli indirizzi */ 00048 s->top_elem = s->top_elem->next; 00049 s->num_threads--; 00050 free(tmp); 00051 } 00052 return sk_cl; 00053 }
Rimuove dalla lista un elemento con chiave "sk_cl" e lo disalloca.
| s | puntatore alla lista | |
| sk_cl | cidentificatore del canale di comunicazione |
Definizione alla linea 84 del file lista.c.
00084 { 00085 int ret_val=0; 00086 00087 if (s->top_elem){ 00088 /* Cerchiamo e rimuoviamo... */ 00089 ret_val = delete_elem(sk_cl, &(s->top_elem)); 00090 if (!ret_val) s->num_threads--; 00091 return ret_val; 00092 } 00093 /* Altrimenti errore lista vuota... */ 00094 return -1; 00095 }
1.6.3