#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 14 del file lista.c.
00014 { 00015 stack->num_threads=0; /* azzeramento del contatore */ 00016 stack->top_elem=NULL; /* azzeramento del puntatore */ 00017 }
Inserisce un elemento nello stack
sk_cl | ||
*stack |
Definizione alla linea 19 del file lista.c.
00019 { 00020 struct thread *new = NULL; 00021 00022 if (!(new = (struct thread *) malloc(sizeof(struct thread)))){ 00023 errore(__FILE__,__LINE__, 00024 "Errore nel creare un nuovo elemento (STACK)",errno); 00025 return errno; 00026 } 00027 new->sk_cl = sk_cl; 00028 new->next = s->top_elem;/* fa puntare il nuovo elemento al primo della lista */ 00029 s->top_elem = new; /* inserisce il nuovo elemento in testa alla lista */ 00030 s->num_threads++; /* incrementa il valore del contatore */ 00031 return 0; 00032 }
Estrae l'elemento in cima allo stack
*stack |
Definizione alla linea 34 del file lista.c.
00034 { 00035 int sk_cl = -1; 00036 /* Puntatore temporaneo che puntera' 00037 * all'area di memoria da eliminare */ 00038 struct thread *tmp; 00039 00040 /* Se la lista non e' vuota... */ 00041 if (s->top_elem){ 00042 sk_cl = s->top_elem->sk_cl; 00043 /* Ora tmp punta all'area di memoria dell'elemento in cima alla lista */ 00044 tmp = s->top_elem; 00045 /* Il secondo elemento della lista diventa il primo, 00046 * vengono scambiati cioe' gli indirizzi */ 00047 s->top_elem = s->top_elem->next; 00048 s->num_threads--; 00049 free(tmp); 00050 } 00051 return sk_cl; 00052 }
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 83 del file lista.c.
00083 { 00084 int ret_val=0; 00085 00086 if (s->top_elem){ 00087 /* Cerchiamo e rimuoviamo... */ 00088 ret_val = delete_elem(sk_cl, &(s->top_elem)); 00089 if (!ret_val) s->num_threads--; 00090 return ret_val; 00091 } 00092 /* Altrimenti errore lista vuota... */ 00093 return -1; 00094 }