-
Notifications
You must be signed in to change notification settings - Fork 1
/
biz.hpp
89 lines (58 loc) · 1.6 KB
/
biz.hpp
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#pragma once
#include "parser.hpp"
#include <boost/filesystem.hpp>
#include <boost/date_time.hpp>
#include <vector>
#include <string>
#include <memory>
namespace crowd {
struct Post {
explicit Post(const boost::filesystem::path &);
Post(const Post &);
Post(Post &&);
virtual ~Post();
const std::string &title() const;
const std::string &content() const;
const boost::gregorian::date& date() const;
Post &operator=(Post &&);
bool load();
private:
boost::filesystem::path _path;
std::unique_ptr<std::string> _title;
std::unique_ptr<std::string> _content;
boost::gregorian::date _date;
std::vector<std::string> _tags;
};
struct Theme {
explicit Theme(const boost::filesystem::path &path = "");
Theme(const Theme &);
Theme(Theme &&);
Theme &operator=(const Theme &);
std::string post_template();
const boost::filesystem::path &path() const;
private:
bool isValid() const;
boost::filesystem::path _path;
std::string _post_template;
};
struct Config {
explicit Config(const boost::filesystem::path &);
const boost::filesystem::path &theme_path() const;
private:
boost::filesystem::path _path;
boost::filesystem::path _theme_path;
};
struct Blog {
typedef std::vector<Post> PostList;
explicit Blog(const Config &);
Blog(Blog &&);
void posts(PostList *);
const PostList *posts() const;
void write_to(boost::filesystem::path &);
private:
std::unique_ptr<Parser> _parser;
Config _config;
Theme _theme;
std::unique_ptr<PostList> _posts;
};
}