-
Notifications
You must be signed in to change notification settings - Fork 0
/
Account.hpp
187 lines (147 loc) · 6.15 KB
/
Account.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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
/****************************************************************************************************************************
Title : Account.hpp
Author : Modified by Kasaf Shah
Description : header/interface files for Account class
Date : 12/09/2022
****************************************************************************************************************************/
#ifndef ACCOUNT_
#define ACCOUNT_
#include <iostream>
#include <string>
#include <vector>
#include "Post.hpp"
#include "Network.hpp"
#include "LinkedList.hpp"
#include "Node.hpp"
#include <stack>
#include <queue>
class Account {
public:
//default constructor
//@post: set username and password to ""
// creates an empty vector of post objects to store into feed_
Account();
/**
Parameterized Constructor
@param username : username of the account, stored into username_
@param password : password of the account, stored into password_
@post: sets the private members to the value of the parameters
*/
Account(std::string username, std::string password);
/**
@return: the username of the Account
*/
std::string getUsername() const;
/**
@param: a reference to the username of the Account
@post: sets the private member to the value of the parameter
*/
void setUsername(const std::string& username);
/**
@return: the password of the Account
*/
std::string getPassword() const;
/**
@param a reference to the password of the Account
@post: sets the private member to the value of the parameter
*/
void setPassword(const std::string& password);
/**
Accessor function
@return : the pointer to the Network the account is in
*/
Network<Account>* getNetwork() const;
/**
Mutator function
@param : a pointer to a Network
@post : the Network pointer private member points to the input Network
*/
void setNetwork(Network<Account>* network);
/**
@param newPost : The pointer to the Post object that will be added to its list
@return : Will return true if a post gets added sucesfully to the vector
@post: " Adds post to posts_ and its Networks feed_
*/
bool addPost(Post* newPost);
/*
@post: Prints the feed_ that contains the post objects by calling their display function
*/
void viewPosts() const;
/**
@param : the username of the Account to follow
@return : true if the account was successfully able to follow, false otherwise
@post : adds the username to the vector of following accounts only if
it is affiliated to a Network AND it is not already following an account
with the same username.
*/
bool followAccount(const std::string username);
/**
@return : the vector of usernames the Account is following
*/
std::vector<std::string> viewFollowing() const;
/**
@return : true if account has same private members as parameter,
false otherwise
*/
bool operator==(const Account &acc) const;
/*
@param : A pointer to a Post
@return : True iff the Post was successfully found and removed,
false othewise.
@post : Removes the given Post from its list
as well as from the Network's feed.
*/
bool removePost(Post* post);
/*
@param : Pointer to a Post object
@param : The new title of the Post (or an empty string if you do not
want to change it)
@param : The new body of the Post (or an empty string if you do not
want to change it)
@post : This function will take the Post and given the new title and body,
update the Posts title and body as appropriate. It will also update
the `timestamp_` to the current time of the update. This function should then
update the location of the Post in its list of `posts_` to the front of the list
as well as utilizing its Network pointer to do the same in the `feed_`.
*/
void updatePost(Post* post, std::string new_title, std::string new_body);
//@return : a pointer to the Post with least likes
Post* getMinLikes();
//@return : a pointer to the Post with most likes
Post* getMaxLikes();
/*
@return : a vector of pointers to Post
@post : the order of the Posts in the vector is by increasing
priority, and within each priority class, from oldest
to newest
*/
std::vector<Post*> increasingPriorityOldestToNewest();
/*
@return : a vector of pointers to Post
@post : the order of the Posts in the vector is by increasing
priority, and within each priority class, from newest
to oldest*/
std::vector<Post*> increasingPriorityNewestToOldest();
/*
@return : a vector of pointers to Post
@post : the order of the Posts in the vector is by decreasing
priority, and within each priority class, from oldest
to newest
*/
std::vector<Post*> decreasingPriorityOldestToNewest();
/*
@return : a vector of pointers to Post
@post : the order of the Posts in the vector is by decreasing
priority, and within each priority class, from newest
to oldest*/
std::vector<Post*> decreasingPriorityNewestToOldest();
private:
std::string username_;
std::string password_;
LinkedList<Post*> posts_;
std::vector<std::string> following_;
Network<Account>* net_;
std::stack<Post*> max_stack; //stack for max likes
std::stack<Post*> min_stack; //stack for min likes
}; // end Account
#endif