~kris/hacks

sbot

ref: a6258c0c45f7c5d08ff77d4bcf9d747a24199a15 sbot/crawl.h -rw-r--r-- 1.3 KiB
a6258c0c — Kris Yotam update sbot 6 months ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
/* 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 */