CARS
Functions

/home/nicola/Dropbox/Progetto SOL/CARS_terfram/src/dgraph.c File Reference

#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include "dgraph.h"
#include "macros.h"
#include "stringparser.h"

Functions

graph_tnew_graph (unsigned int n, char **lbl)
void free_graph (graph_t **g)
void print_graph (graph_t *g)
graph_tcopy_graph (graph_t *g)
int add_edge (graph_t *g, char *e)
int is_node (graph_t *g, char *ss)
bool_t is_edge (graph_t *g, unsigned int n1, unsigned int n2)
int degree (graph_t *g, char *lbl)
int n_size (graph_t *g)
int e_size (graph_t *g)
graph_tload_graph (FILE *fdnodes, FILE *fdarcs)
int save_graph (FILE *fdnodes, FILE *fdarcs, graph_t *g)

Detailed Description

Author:
Nicola Corti

Si dichiara che il contenuto di questo file e' in ogni sua parte opera originale dell' autore.


Function Documentation

int add_edge ( graph_t g,
char *  e 
)

aggiunge un arco al grafo (senza ripetizioni, ogni arco deve connettere una diversa coppia sorgente-destinazione)

Parameters:
gpuntatore al grafo
earco, stringa di formato LBLSORGENTE:LBLDESTINAZIONE:DISTANZA_IN_KM Esempio: FIRENZE:PRATO:20.4

Attenzione: le citta possono contenere solo caratteri alfanumerici e lo spazio ' ', la distanza e' un numero reale,

Return values:
0se l'inserzione e' avvenuta con successo
-1se si e' verificato un errore (setta errno), in questo caso il grafo originario non deve essere modificato errno == ENOMEM se l'allocazione e' fallita errno == EINVAL se l'arco e' inconsistente (esempio, il nodo sorgente/destinazione non esiste)

References node::adj, FALSE, is_edge(), is_node(), LLABEL, MALLOC_ERRNO, graph::node, str_pars(), and TRUE.

Referenced by load_graph(), and main().

graph_t* copy_graph ( graph_t g)

crea una copia completa del grafo (allocando tutta la memoria necessaria)

Parameters:
gpuntatore al grafo da copiare
Return values:
ppuntatore al nuovo grafo (se tutto e' andato bene)
NULLse si verificato un errore -- setta errno errno == ENOMEM se l'allocazione e' fallita errno == EINVAL se i parametri sono inconsistenti (esempio, g NULL)

References node::adj, free_graph(), edge::km, edge::label, node::label, MALLOC_ERRNO, n_size(), edge::next, and graph::node.

Referenced by main().

int degree ( graph_t g,
char *  lbl 
)

grado di un nodo

Parameters:
gpuntatore al grafo
lblla label del nodo
Return values:
nil numero di archi uscenti dal nodo
-1se si e' verificato un errore (setta errno )

References node::adj, is_node(), and graph::node.

Referenced by e_size(), and main().

int e_size ( graph_t g)

numero di archi un grafo

Parameters:
gpuntatore al grafo
Return values:
nil numero di archi di g
-1se si e' verificato un errore (setta errno)

References degree(), and n_size().

Referenced by main().

void free_graph ( graph_t **  g)

distrugge un grafo deallocando tutta la sua memoria

Parameters:
gpuntatore al puntatore al grafo da deallocare -- viene messo a NULL dalla funzione dopo la deallocazione

References node::adj, and n_size().

Referenced by copy_graph(), load_graph(), main(), and new_graph().

bool_t is_edge ( graph_t g,
unsigned int  n1,
unsigned int  n2 
)

verifica l'esistenza di un arco

Parameters:
gpuntatore al grafo
n1etichetta nodo primo estremo
n2etichetta nodo secondo estremo
Return values:
TRUEse l'arco esiste
FALSEaltrimenti

References node::adj, FALSE, edge::label, n_size(), edge::next, graph::node, and TRUE.

Referenced by add_edge(), and main().

int is_node ( graph_t g,
char *  ss 
)

verifica l'esistenza di un nodo

Parameters:
gpuntatore al grafo
sslabel del nodo
Return values:
nl'indice nel grafo (0..(n_size -1)) se il nodo esiste
-1altrimenti

References node::label, n_size(), and graph::node.

Referenced by add_edge(), appendReqOff(), checkValidMessage(), degree(), and main().

graph_t* load_graph ( FILE *  fdnodes,
FILE *  fdarcs 
)

carica il grafo da 2 file, il primo contiene le label possibili de nodi, ad esempio: PISA FIRENZE EMPOLI separate da '
', il secondo contenente gli archi secondo il formato LBLSORGENTE:LBLDESTINAZIONE:DISTANZA_IN_KM Esempio: FIRENZE:PRATO:20.4 sempre separati da '
'

Attenzione: le citta possono contenere solo caratteri alfanumerici e lo spazio ' ', la distanza e' un numero reale, ci possono essere linee vuote (cioe' che contengono solo '
')

Parameters:
fdnodesfile descriptor del file contenente le label dei nodi
fdarcsfile descriptor del file contenente gli archi
Return values:
gpuntatore al nuovo grafo se il caricamento e' avvenuto con successo
NULLse si e' verificato un errore (setta errno), es errno == ENOMEM se l'allocazione e' fallita errno == EINVAL se i parametri sono inconsistenti (esempio, fd non valido)

References add_edge(), free_graph(), LKM, LLABEL, MALLOC_ERRNO, and new_graph().

Referenced by main().

int n_size ( graph_t g)

numero di nodi di un grafo

Parameters:
gpuntatore al grafo
Return values:
nil numero di nodi di g
-1se si e' verificato un errore (setta errno)

References graph::size.

Referenced by copy_graph(), dijkstra(), e_size(), free_graph(), is_edge(), is_node(), main(), print_graph(), save_graph(), and shpath_to_string().

graph_t* new_graph ( unsigned int  n,
char **  lbl 
)

crea un grafo

Parameters:
nnumero dei nodi del grafo
lblarray di etichette de nodi formato: static const char* citta[] = { "PISA", "LUCCA", "SIENA", "LIVORNO", NULL, };

Attenzione: le citta possono contenere solo caratteri alfanumerici e lo spazio ' '

Return values:
ppuntatore al nuovo grafo (se tutto e' andato bene)
NULLse si e' verificato un errore (setta errno) (errno == EINTR se i parametri non sono validi es lbl a NULL) (errno == ENOMEM se l'allocazione e' fallita)

References node::adj, FALSE, free_graph(), is_correct_labelarray(), node::label, and MALLOC_ERRNO.

Referenced by load_graph(), and main().

void print_graph ( graph_t g)

stampa il grafo su stdout (formato arbitrario a caratteri)

Parameters:
gpuntatore al grafo da stampare

References node::adj, edge::km, node::label, edge::label, and n_size().

Referenced by main().

int save_graph ( FILE *  fdnodes,
FILE *  fdarcs,
graph_t g 
)

salva il grafo su due file, formato

See also:
load_graph
Parameters:
fdnodesfile descriptor del file che dovra' contenere i nodi del grafo
fdarcsfile descriptor del file che dovra' contenere gli archi del grafo
ggrafo da scrivere
Return values:
0se la scrittura e' andata a buon fine
-1se si e' verificato un errore (setta errno), es. errno == EIO se la scrittura e' fallita

References node::adj, edge::km, edge::label, node::label, n_size(), and graph::node.

Referenced by main().