Skip to content

Commit aa252df

Browse files
authored
Merge pull request #20 from Microsoft/statebyref
Switch back to passing const std::shared_ptr<service::RequestState>& where possible
2 parents 39b486d + 36646ff commit aa252df

File tree

11 files changed

+315
-255
lines changed

11 files changed

+315
-255
lines changed

.gitignore

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,10 @@ Debug/
66
Release/
77
Testing/
88
Win32/
9-
/IntrospectionSchema.*
10-
/TodaySchema.*
9+
/include/graphqlservice/IntrospectionSchema.h
10+
/IntrospectionSchema.cpp
11+
/include/TodaySchema.h
12+
/TodaySchema.cpp
1113
*.filters
1214
*.vcxproj
1315
*.vcxproj.user
@@ -22,6 +24,8 @@ LastTest.log
2224
lib*.a
2325
lib*.so
2426
Makefile
27+
*.ninja
28+
.ninja_*
2529
schemagen
2630
settings.json
2731
test_today

GraphQLService.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -347,7 +347,7 @@ Object::Object(TypeNames&& typeNames, ResolverMap&& resolvers)
347347
{
348348
}
349349

350-
std::future<response::Value> Object::resolve(std::shared_ptr<RequestState> state, const peg::ast_node& selection, const FragmentMap& fragments, const response::Value& variables) const
350+
std::future<response::Value> Object::resolve(const std::shared_ptr<RequestState>& state, const peg::ast_node& selection, const FragmentMap& fragments, const response::Value& variables) const
351351
{
352352
std::queue<std::future<response::Value>> selections;
353353

@@ -389,11 +389,11 @@ std::future<response::Value> Object::resolve(std::shared_ptr<RequestState> state
389389
}, std::move(selections));
390390
}
391391

392-
void Object::beginSelectionSet(std::shared_ptr<RequestState>) const
392+
void Object::beginSelectionSet(const std::shared_ptr<RequestState>&) const
393393
{
394394
}
395395

396-
void Object::endSelectionSet(std::shared_ptr<RequestState>) const
396+
void Object::endSelectionSet(const std::shared_ptr<RequestState>&) const
397397
{
398398
}
399399

@@ -402,7 +402,7 @@ Request::Request(TypeMap&& operationTypes)
402402
{
403403
}
404404

405-
std::future<response::Value> Request::resolve(std::shared_ptr<RequestState> state, const peg::ast_node& root, const std::string& operationName, const response::Value& variables) const
405+
std::future<response::Value> Request::resolve(const std::shared_ptr<RequestState>& state, const peg::ast_node& root, const std::string& operationName, const response::Value& variables) const
406406
{
407407
FragmentDefinitionVisitor fragmentVisitor;
408408

@@ -425,7 +425,7 @@ std::future<response::Value> Request::resolve(std::shared_ptr<RequestState> stat
425425
}
426426

427427
SelectionVisitor::SelectionVisitor(std::shared_ptr<RequestState> state, const FragmentMap& fragments, const response::Value& variables, const TypeNames& typeNames, const ResolverMap& resolvers)
428-
: _state(state)
428+
: _state(std::move(state))
429429
, _fragments(fragments)
430430
, _variables(variables)
431431
, _typeNames(typeNames)
@@ -880,7 +880,7 @@ void FragmentDefinitionVisitor::visit(const peg::ast_node& fragmentDefinition)
880880
}
881881

882882
OperationDefinitionVisitor::OperationDefinitionVisitor(std::shared_ptr<RequestState> state, const TypeMap& operations, const std::string& operationName, const response::Value& variables, const FragmentMap& fragments)
883-
: _state(state)
883+
: _state(std::move(state))
884884
, _operations(operations)
885885
, _operationName(operationName)
886886
, _variables(variables)

Introspection.cpp

Lines changed: 47 additions & 47 deletions
Large diffs are not rendered by default.

SchemaGenerator.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1462,7 +1462,7 @@ std::string Generator::getFieldDeclaration(const OutputField& outputField) const
14621462

14631463
fieldName[0] = std::toupper(fieldName[0]);
14641464
output << R"cpp( virtual std::future<)cpp" << getOutputCppType(outputField)
1465-
<< R"cpp(> get)cpp" << fieldName << R"cpp((std::shared_ptr<service::RequestState> state)cpp";
1465+
<< R"cpp(> get)cpp" << fieldName << R"cpp((const std::shared_ptr<service::RequestState>& state)cpp";
14661466

14671467
for (const auto& argument : outputField.arguments)
14681468
{

Today.cpp

Lines changed: 48 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -39,18 +39,26 @@ Query::Query(appointmentsLoader&& getAppointments, tasksLoader&& getTasks, unrea
3939
{
4040
}
4141

42-
void Query::loadAppointments() const
42+
void Query::loadAppointments(const std::shared_ptr<service::RequestState>& state) const
4343
{
44+
if (state)
45+
{
46+
auto todayState = std::static_pointer_cast<RequestState>(state);
47+
48+
todayState->appointmentsRequestId = todayState->requestId;
49+
todayState->loadAppointmentsCount++;
50+
}
51+
4452
if (_getAppointments)
4553
{
4654
_appointments = _getAppointments();
4755
_getAppointments = nullptr;
4856
}
4957
}
5058

51-
std::shared_ptr<Appointment> Query::findAppointment(std::shared_ptr<service::RequestState> state, const std::vector<uint8_t>& id) const
59+
std::shared_ptr<Appointment> Query::findAppointment(const std::shared_ptr<service::RequestState>& state, const std::vector<uint8_t>& id) const
5260
{
53-
loadAppointments();
61+
loadAppointments(state);
5462

5563
for (const auto& appointment : _appointments)
5664
{
@@ -65,18 +73,26 @@ std::shared_ptr<Appointment> Query::findAppointment(std::shared_ptr<service::Req
6573
return nullptr;
6674
}
6775

68-
void Query::loadTasks() const
76+
void Query::loadTasks(const std::shared_ptr<service::RequestState>& state) const
6977
{
78+
if (state)
79+
{
80+
auto todayState = std::static_pointer_cast<RequestState>(state);
81+
82+
todayState->tasksRequestId = todayState->requestId;
83+
todayState->loadTasksCount++;
84+
}
85+
7086
if (_getTasks)
7187
{
7288
_tasks = _getTasks();
7389
_getTasks = nullptr;
7490
}
7591
}
7692

77-
std::shared_ptr<Task> Query::findTask(std::shared_ptr<service::RequestState> state, const std::vector<uint8_t>& id) const
93+
std::shared_ptr<Task> Query::findTask(const std::shared_ptr<service::RequestState>& state, const std::vector<uint8_t>& id) const
7894
{
79-
loadTasks();
95+
loadTasks(state);
8096

8197
for (const auto& task : _tasks)
8298
{
@@ -91,18 +107,26 @@ std::shared_ptr<Task> Query::findTask(std::shared_ptr<service::RequestState> sta
91107
return nullptr;
92108
}
93109

94-
void Query::loadUnreadCounts() const
110+
void Query::loadUnreadCounts(const std::shared_ptr<service::RequestState>& state) const
95111
{
112+
if (state)
113+
{
114+
auto todayState = std::static_pointer_cast<RequestState>(state);
115+
116+
todayState->unreadCountsRequestId = todayState->requestId;
117+
todayState->loadUnreadCountsCount++;
118+
}
119+
96120
if (_getUnreadCounts)
97121
{
98122
_unreadCounts = _getUnreadCounts();
99123
_getUnreadCounts = nullptr;
100124
}
101125
}
102126

103-
std::shared_ptr<Folder> Query::findUnreadCount(std::shared_ptr<service::RequestState> state, const std::vector<uint8_t>& id) const
127+
std::shared_ptr<Folder> Query::findUnreadCount(const std::shared_ptr<service::RequestState>& state, const std::vector<uint8_t>& id) const
104128
{
105-
loadUnreadCounts();
129+
loadUnreadCounts(state);
106130

107131
for (const auto& folder : _unreadCounts)
108132
{
@@ -117,7 +141,7 @@ std::shared_ptr<Folder> Query::findUnreadCount(std::shared_ptr<service::RequestS
117141
return nullptr;
118142
}
119143

120-
std::future<std::shared_ptr<service::Object>> Query::getNode(std::shared_ptr<service::RequestState> state, std::vector<uint8_t>&& id) const
144+
std::future<std::shared_ptr<service::Object>> Query::getNode(const std::shared_ptr<service::RequestState>& state, std::vector<uint8_t>&& id) const
121145
{
122146
std::promise<std::shared_ptr<service::Object>> promise;
123147
auto appointment = findAppointment(state, id);
@@ -154,7 +178,7 @@ struct EdgeConstraints
154178
using vec_type = std::vector<std::shared_ptr<_Object>>;
155179
using itr_type = typename vec_type::const_iterator;
156180

157-
EdgeConstraints(std::shared_ptr<service::RequestState> state, const vec_type& objects)
181+
EdgeConstraints(const std::shared_ptr<service::RequestState>& state, const vec_type& objects)
158182
: _state(state)
159183
, _objects(objects)
160184
{
@@ -242,13 +266,13 @@ struct EdgeConstraints
242266
const vec_type& _objects;
243267
};
244268

245-
std::future<std::shared_ptr<object::AppointmentConnection>> Query::getAppointments(std::shared_ptr<service::RequestState> state, std::unique_ptr<int>&& first, std::unique_ptr<response::Value>&& after, std::unique_ptr<int>&& last, std::unique_ptr<response::Value>&& before) const
269+
std::future<std::shared_ptr<object::AppointmentConnection>> Query::getAppointments(const std::shared_ptr<service::RequestState>& state, std::unique_ptr<int>&& first, std::unique_ptr<response::Value>&& after, std::unique_ptr<int>&& last, std::unique_ptr<response::Value>&& before) const
246270
{
247271
auto spThis = shared_from_this();
248272
return std::async(std::launch::async,
249-
[this, spThis](std::shared_ptr<service::RequestState> stateWrapped, std::unique_ptr<int>&& firstWrapped, std::unique_ptr<response::Value>&& afterWrapped, std::unique_ptr<int>&& lastWrapped, std::unique_ptr<response::Value>&& beforeWrapped)
273+
[this, spThis](const std::shared_ptr<service::RequestState>& stateWrapped, std::unique_ptr<int>&& firstWrapped, std::unique_ptr<response::Value>&& afterWrapped, std::unique_ptr<int>&& lastWrapped, std::unique_ptr<response::Value>&& beforeWrapped)
250274
{
251-
loadAppointments();
275+
loadAppointments(stateWrapped);
252276

253277
EdgeConstraints<Appointment, AppointmentConnection> constraints(stateWrapped, _appointments);
254278
auto connection = constraints(firstWrapped.get(), afterWrapped.get(), lastWrapped.get(), beforeWrapped.get());
@@ -257,13 +281,13 @@ std::future<std::shared_ptr<object::AppointmentConnection>> Query::getAppointmen
257281
}, std::move(state), std::move(first), std::move(after), std::move(last), std::move(before));
258282
}
259283

260-
std::future<std::shared_ptr<object::TaskConnection>> Query::getTasks(std::shared_ptr<service::RequestState> state, std::unique_ptr<int>&& first, std::unique_ptr<response::Value>&& after, std::unique_ptr<int>&& last, std::unique_ptr<response::Value>&& before) const
284+
std::future<std::shared_ptr<object::TaskConnection>> Query::getTasks(const std::shared_ptr<service::RequestState>& state, std::unique_ptr<int>&& first, std::unique_ptr<response::Value>&& after, std::unique_ptr<int>&& last, std::unique_ptr<response::Value>&& before) const
261285
{
262286
auto spThis = shared_from_this();
263287
return std::async(std::launch::async,
264-
[this, spThis](std::shared_ptr<service::RequestState> stateWrapped, std::unique_ptr<int>&& firstWrapped, std::unique_ptr<response::Value>&& afterWrapped, std::unique_ptr<int>&& lastWrapped, std::unique_ptr<response::Value>&& beforeWrapped)
288+
[this, spThis](const std::shared_ptr<service::RequestState>& stateWrapped, std::unique_ptr<int>&& firstWrapped, std::unique_ptr<response::Value>&& afterWrapped, std::unique_ptr<int>&& lastWrapped, std::unique_ptr<response::Value>&& beforeWrapped)
265289
{
266-
loadTasks();
290+
loadTasks(stateWrapped);
267291

268292
EdgeConstraints<Task, TaskConnection> constraints(stateWrapped, _tasks);
269293
auto connection = constraints(firstWrapped.get(), afterWrapped.get(), lastWrapped.get(), beforeWrapped.get());
@@ -272,13 +296,13 @@ std::future<std::shared_ptr<object::TaskConnection>> Query::getTasks(std::shared
272296
}, std::move(state), std::move(first), std::move(after), std::move(last), std::move(before));
273297
}
274298

275-
std::future<std::shared_ptr<object::FolderConnection>> Query::getUnreadCounts(std::shared_ptr<service::RequestState> state, std::unique_ptr<int>&& first, std::unique_ptr<response::Value>&& after, std::unique_ptr<int>&& last, std::unique_ptr<response::Value>&& before) const
299+
std::future<std::shared_ptr<object::FolderConnection>> Query::getUnreadCounts(const std::shared_ptr<service::RequestState>& state, std::unique_ptr<int>&& first, std::unique_ptr<response::Value>&& after, std::unique_ptr<int>&& last, std::unique_ptr<response::Value>&& before) const
276300
{
277301
auto spThis = shared_from_this();
278302
return std::async(std::launch::async,
279-
[this, spThis](std::shared_ptr<service::RequestState> stateWrapped, std::unique_ptr<int>&& firstWrapped, std::unique_ptr<response::Value>&& afterWrapped, std::unique_ptr<int>&& lastWrapped, std::unique_ptr<response::Value>&& beforeWrapped)
303+
[this, spThis](const std::shared_ptr<service::RequestState>& stateWrapped, std::unique_ptr<int>&& firstWrapped, std::unique_ptr<response::Value>&& afterWrapped, std::unique_ptr<int>&& lastWrapped, std::unique_ptr<response::Value>&& beforeWrapped)
280304
{
281-
loadUnreadCounts();
305+
loadUnreadCounts(stateWrapped);
282306

283307
EdgeConstraints<Folder, FolderConnection> constraints(stateWrapped, _unreadCounts);
284308
auto connection = constraints(firstWrapped.get(), afterWrapped.get(), lastWrapped.get(), beforeWrapped.get());
@@ -287,7 +311,7 @@ std::future<std::shared_ptr<object::FolderConnection>> Query::getUnreadCounts(st
287311
}, std::move(state), std::move(first), std::move(after), std::move(last), std::move(before));
288312
}
289313

290-
std::future<std::vector<std::shared_ptr<object::Appointment>>> Query::getAppointmentsById(std::shared_ptr<service::RequestState> state, std::vector<std::vector<uint8_t>>&& ids) const
314+
std::future<std::vector<std::shared_ptr<object::Appointment>>> Query::getAppointmentsById(const std::shared_ptr<service::RequestState>& state, std::vector<std::vector<uint8_t>>&& ids) const
291315
{
292316
std::promise<std::vector<std::shared_ptr<object::Appointment>>> promise;
293317
std::vector<std::shared_ptr<object::Appointment>> result(ids.size());
@@ -302,7 +326,7 @@ std::future<std::vector<std::shared_ptr<object::Appointment>>> Query::getAppoint
302326
return promise.get_future();
303327
}
304328

305-
std::future<std::vector<std::shared_ptr<object::Task>>> Query::getTasksById(std::shared_ptr<service::RequestState> state, std::vector<std::vector<uint8_t>>&& ids) const
329+
std::future<std::vector<std::shared_ptr<object::Task>>> Query::getTasksById(const std::shared_ptr<service::RequestState>& state, std::vector<std::vector<uint8_t>>&& ids) const
306330
{
307331
std::promise<std::vector<std::shared_ptr<object::Task>>> promise;
308332
std::vector<std::shared_ptr<object::Task>> result(ids.size());
@@ -317,7 +341,7 @@ std::future<std::vector<std::shared_ptr<object::Task>>> Query::getTasksById(std:
317341
return promise.get_future();
318342
}
319343

320-
std::future<std::vector<std::shared_ptr<object::Folder>>> Query::getUnreadCountsById(std::shared_ptr<service::RequestState> state, std::vector<std::vector<uint8_t>>&& ids) const
344+
std::future<std::vector<std::shared_ptr<object::Folder>>> Query::getUnreadCountsById(const std::shared_ptr<service::RequestState>& state, std::vector<std::vector<uint8_t>>&& ids) const
321345
{
322346
std::promise<std::vector<std::shared_ptr<object::Folder>>> promise;
323347
std::vector<std::shared_ptr<object::Folder>> result(ids.size());
@@ -337,7 +361,7 @@ Mutation::Mutation(completeTaskMutation&& mutateCompleteTask)
337361
{
338362
}
339363

340-
std::future<std::shared_ptr<object::CompleteTaskPayload>> Mutation::getCompleteTask(std::shared_ptr<service::RequestState> state, CompleteTaskInput&& input) const
364+
std::future<std::shared_ptr<object::CompleteTaskPayload>> Mutation::getCompleteTask(const std::shared_ptr<service::RequestState>& state, CompleteTaskInput&& input) const
341365
{
342366
std::promise<std::shared_ptr<object::CompleteTaskPayload>> promise;
343367

0 commit comments

Comments
 (0)