20 |
|
#include <xml/parse.hpp> |
21 |
|
#include <xml/textwriter.hpp> |
22 |
|
|
23 |
– |
#include <string> |
24 |
– |
#include <map> |
25 |
– |
|
23 |
|
#include "Page.hpp" |
24 |
|
|
25 |
+ |
struct LessThan |
26 |
+ |
{ |
27 |
+ |
_finline static bool Execute(const cse::String &left, const cse::String &right) |
28 |
+ |
{ |
29 |
+ |
const cse::String::Data &left_(left), &right_(right); |
30 |
+ |
int value(ext::Compare(left.Begin(), right.Begin(), left.GetSize() < right.GetSize() ? left.GetSize() : right.GetSize())); |
31 |
+ |
|
32 |
+ |
if (value < 0) |
33 |
+ |
return true; |
34 |
+ |
else if (!value) |
35 |
+ |
return left.GetSize() < right.GetSize(); |
36 |
+ |
else |
37 |
+ |
return false; |
38 |
+ |
} |
39 |
+ |
}; |
40 |
+ |
|
41 |
|
class SiteMapper |
42 |
|
{ |
43 |
|
private: |
44 |
|
cse::String comment; |
45 |
|
ext::Vector<Page> pages; |
46 |
< |
std::map<std::string, std::multimap<std::string, Page> > newPages; |
47 |
< |
void oldMap(const cse::String& siteMap); |
48 |
< |
void oldMap(ext::Vector<Page>& pages, xml::Node* list); |
49 |
< |
void newIndex(const cse::String& siteIndex); |
50 |
< |
bool newIndex(ext::Vector<Page>& pages, Page& page); |
51 |
< |
void newMap(const cse::String& siteMap); |
52 |
< |
void newMap(ext::Vector<Page>& pages, const cse::String& childOf, std::multimap<std::string, Page>& newPages); |
46 |
> |
ext::RedBlackMap<cse::String, ext::RedBlackMap<cse::String, ext::Vector<Page>, LessThan>, LessThan> newPages; |
47 |
> |
void oldMap(const cse::String &siteMap); |
48 |
> |
void oldMap(ext::Vector<Page> &pages, xml::Node* list); |
49 |
> |
void newIndex(const cse::String &siteIndex); |
50 |
> |
bool newIndex(ext::Vector<Page> &pages, Page &page); |
51 |
> |
void newMap(const cse::String &siteMap); |
52 |
> |
void newMap(ext::Vector<Page> &pages, const cse::String &childOf, ext::RedBlackMap<cse::String, ext::Vector<Page>, LessThan> &newPages); |
53 |
|
public: |
54 |
< |
SiteMapper(const cse::String& siteIndex, const cse::String& siteMap); |
54 |
> |
SiteMapper(const cse::String &siteIndex, const cse::String &siteMap); |
55 |
|
static cse::String program; |
56 |
|
static bool debug; |
57 |
|
}; |