57 lines · 1.3 KB · C
RawDownload
/* See LICENSE file for copyright and license details. */ #ifndef CRAWL_H#define CRAWL_H #include <stddef.h> /* Hash table size (prime, ~64k buckets) */#define HT_SIZE 65521 /* URL queue for BFS crawling */typedef struct QueueNode {	char *url;	int depth;	struct QueueNode *next;} QueueNode; typedef struct {	QueueNode *head;	QueueNode *tail;	size_t count;} UrlQueue; /* Hash table node for visited URLs */typedef struct HashNode {	char *url;	struct HashNode *next;} HashNode; /* Hash table based visited set - O(1) lookup */typedef struct {	HashNode *buckets[HT_SIZE];	size_t count;} VisitedSet; /* Queue operations */UrlQueue *queue_new(void);void queue_free(UrlQueue *q);void queue_push(UrlQueue *q, const char *url, int depth);QueueNode *queue_pop(UrlQueue *q);int queue_empty(UrlQueue *q);size_t queue_size(UrlQueue *q); /* Visited set operations (hash table) */VisitedSet *visited_new(void);void visited_free(VisitedSet *v);void visited_add(VisitedSet *v, const char *url);int visited_contains(VisitedSet *v, const char *url);size_t visited_count(VisitedSet *v); /* URL normalization for comparison */char *url_normalize(const char *url); /* Get path component from URL for directory structure */char *url_to_path(const char *url, const char *base_domain); #endif /* CRAWL_H */