about summary refs log tree commit diff stats
path: root/src/tweet.h
diff options
context:
space:
mode:
authorKelly Rauchenberger <fefferburbia@gmail.com>2018-08-30 20:43:23 -0400
committerKelly Rauchenberger <fefferburbia@gmail.com>2018-08-30 20:43:23 -0400
commit8584857578c3a2946a03de98ff3803431143297a (patch)
treee3cb3d9487a7b72a22e5dd50d91011d966a4ee15 /src/tweet.h
parenta9d33aa08df10102539e33c0c6d4334e9e99a470 (diff)
downloadlibtwittercpp-8584857578c3a2946a03de98ff3803431143297a.tar.gz
libtwittercpp-8584857578c3a2946a03de98ff3803431143297a.tar.bz2
libtwittercpp-8584857578c3a2946a03de98ff3803431143297a.zip
Refactored tweet and user classes
The only API-visible change is that these classes are no longer default constructible. Other than that, tweet now uses hatkirby::recptr to wrap its retweeted_status (tweet) and author (user) member objects, removing the need to implement the Rule of Five.
Diffstat (limited to 'src/tweet.h')
-rw-r--r--src/tweet.h122
1 files changed, 50 insertions, 72 deletions
diff --git a/src/tweet.h b/src/tweet.h index 71a27bd..23882e2 100644 --- a/src/tweet.h +++ b/src/tweet.h
@@ -4,94 +4,72 @@
4#include <string> 4#include <string>
5#include <vector> 5#include <vector>
6#include <utility> 6#include <utility>
7#include <cassert>
8#include <list>
9#include <memory>
10#include <ctime> 7#include <ctime>
8#include "../vendor/hkutil/hkutil/recptr.h"
11#include "user.h" 9#include "user.h"
12 10
13namespace twitter { 11namespace twitter {
14 12
15 class client;
16
17 typedef unsigned long long tweet_id; 13 typedef unsigned long long tweet_id;
18 14
19 class tweet { 15 class tweet {
20 public: 16 public:
21 17
22 tweet() {} 18 tweet(std::string data);
23 tweet(std::string data); 19
24 20 tweet_id getID() const
25 tweet(const tweet& other); 21 {
26 tweet(tweet&& other); 22 return _id;
27 23 }
28 tweet& operator=(tweet other); 24
29 25 std::string getText() const
30 friend void swap(tweet& first, tweet& second); 26 {
31 27 return _text;
32 tweet_id getID() const 28 }
29
30 const user& getAuthor() const
31 {
32 return *_author;
33 }
34
35 const std::time_t& getCreatedAt() const
36 {
37 return _created_at;
38 }
39
40 bool isRetweet() const
41 {
42 return _is_retweet;
43 }
44
45 const tweet& getRetweet() const
46 {
47 if (!_is_retweet)
33 { 48 {
34 assert(_valid); 49 throw std::logic_error("Tweet is not a retweet");
35
36 return _id;
37 } 50 }
38 51
39 std::string getText() const 52 return *_retweeted_status;
40 { 53 }
41 assert(_valid);
42 54
43 return _text; 55 const std::vector<std::pair<user_id, std::string>>& getMentions() const
44 } 56 {
45 57 return _mentions;
46 const user& getAuthor() const 58 }
47 {
48 assert(_valid);
49
50 return *_author;
51 }
52
53 const std::time_t& getCreatedAt() const
54 {
55 assert(_valid);
56
57 return _created_at;
58 }
59
60 bool isRetweet() const
61 {
62 assert(_valid);
63
64 return _is_retweet;
65 }
66
67 const tweet& getRetweet() const
68 {
69 assert(_valid && _is_retweet);
70
71 return *_retweeted_status;
72 }
73
74 const std::vector<std::pair<user_id, std::string>>& getMentions() const
75 {
76 assert(_valid);
77
78 return _mentions;
79 }
80 59
81 std::string generateReplyPrefill(const user& me) const; 60 std::string generateReplyPrefill(const user& me) const;
82 61
83 std::string getURL() const; 62 std::string getURL() const;
84 63
85 private: 64 private:
86 65
87 bool _valid = false; 66 tweet_id _id;
88 tweet_id _id; 67 std::string _text;
89 std::string _text; 68 hatkirby::recptr<user> _author;
90 std::unique_ptr<user> _author; 69 std::time_t _created_at;
91 std::time_t _created_at; 70 bool _is_retweet = false;
92 bool _is_retweet = false; 71 hatkirby::recptr<tweet> _retweeted_status;
93 std::unique_ptr<tweet> _retweeted_status; 72 std::vector<std::pair<user_id, std::string>> _mentions;
94 std::vector<std::pair<user_id, std::string>> _mentions;
95 }; 73 };
96 74
97}; 75};