[digraphanalysis-cvs] digraphanalysis/src node.c,NONE,1.1.2.1 node.h,NONE,1.1.2.1 pgpkey.c,1.1,NONE
Status: Planning
Brought to you by:
jbreker
|
From: Jeff B. <jb...@us...> - 2005-03-20 17:26:57
|
Update of /cvsroot/digraphanalysis/digraphanalysis/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv12849/src Added Files: Tag: JBREKER node.c node.h Removed Files: Tag: JBREKER pgpkey.c pgpkey.h Log Message: Do some renaming from keyringanalysis to digraphanalysis. --- pgpkey.h DELETED --- --- NEW FILE: node.h --- /* $Id: node.h,v 1.1.2.1 2005/03/20 17:26:47 jbreker Exp $ * * Copyright (C) 2005 Jeff Breker <jb...@sy...> * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _PGPKEY_H_ #define _PGPKEY_H_ #include "list.h" struct pgpkey_s { char *keyid; float msd; char *name; list_t *signatures; }; typedef struct pgpkey_s pgpkey_t; int pgpkey_compare(void *, void *); int pgpkey_compare_msd(void *, void *); unsigned int pgpkey_distance(pgpkey_t *, pgpkey_t *); void pgpkey_msd(pgpkey_t *, list_t *); pgpkey_t *pgpkey_new(char *, char *); #endif --- pgpkey.c DELETED --- --- NEW FILE: node.c --- /* $Id: node.c,v 1.1.2.1 2005/03/20 17:26:47 jbreker Exp $ * * Copyright (C) 2005 Jeff Breker <jb...@sy...> * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include "list.h" #include "pgpkey.h" int pgpkey_compare(void *key1, void *key2) { return strcmp(((pgpkey_t *) key1)->keyid, ((pgpkey_t *) key2)->keyid); } int pgpkey_compare_msd(void *key1, void *key2) { float tmp; tmp = ((pgpkey_t *) key1)->msd - ((pgpkey_t *) key2)->msd; if(tmp == (float) 0) return strcmp(((pgpkey_t *) key1)->keyid, ((pgpkey_t *) key2)->keyid); else if(tmp > (float) 0) return 1; else return (-1); } unsigned int pgpkey_distance(pgpkey_t *keyto, pgpkey_t *keyfrom) { unsigned int distance; unsigned int last_known_size; list_t *traversed_keys, *tmp_keys; node_t *tmp_node; traversed_keys = list_new(&pgpkey_compare); last_known_size = 0; distance = 1; list_merge_list(traversed_keys, keyto->signatures); while(traversed_keys->size != last_known_size) { if(list_find_object(traversed_keys, keyfrom) != NULL) return distance; last_known_size = traversed_keys->size; ++distance; tmp_keys = traversed_keys; tmp_node = tmp_keys->head; traversed_keys = list_new(&pgpkey_compare); while(tmp_node != NULL) { list_add_object(traversed_keys, tmp_node->object); list_merge_list(traversed_keys, ((pgpkey_t *) tmp_node->object)->signatures); tmp_node = tmp_node->next; } } return 0; } void pgpkey_msd(pgpkey_t *key, list_t *keys) { unsigned int distance, i, num_keys; node_t *iter; distance = 0; num_keys = 0; iter = keys->head; while(iter != NULL) { i = pgpkey_distance(key, (pgpkey_t *) iter->object); if(i > 0) { distance += i; num_keys++; } iter = iter->next; } key->msd = ((float) distance) / ((float) num_keys); return; } pgpkey_t *pgpkey_new(char *keyid, char *name) { pgpkey_t *pgpkey; pgpkey = (pgpkey_t *) malloc(sizeof(pgpkey_t)); pgpkey->keyid = (char *) malloc(17); strncpy(pgpkey->keyid, keyid, 16); *(pgpkey->keyid + 16) = '\0'; pgpkey->name = (char *) malloc(strlen(name) + 1); strncpy(pgpkey->name, name, strlen(name)); *(pgpkey->name + strlen(name)) = '\0'; pgpkey->signatures = list_new(&pgpkey_compare); pgpkey->msd = 0; return pgpkey; } |