summaryrefslogtreecommitdiff
path: root/lib/Domain.cc
blob: f740d71f05425df482639920b8930bb954da1aca (plain)
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
#include "Domain.h"

Domain * Domain::head = 0;

Domain::Domain(const Regex & _pattern) : pattern(_pattern) {
    prev = 0;
    next = head;
    head = this;
    if (next)
        next->prev = this;
}

Domain::~Domain() {
    if (head == this)
        head = next;
    if (next)
        next->prev = prev;
    if (prev)
        prev->next = next;
}

void Domain::OnTop() {
    if (next)
        next->prev = prev;
    if (prev)
        prev->next = next;

    prev = 0;
    next = head;
    head = this;
    next->prev = this;    
}

Domain * Domain::find_domain(const String & url) {
    Domain * r = 0;
    
    if (head)
        r = head->find_domain_r(url);
    
    return r;
}

Domain * Domain::find_domain_r(const String & url) {
    if (pattern.Match(url))
        return this;
    
    if (next)
        return next->find_domain_r(url);
    
    return 0;
}