1919#include < memory>
2020#include < utility>
2121
22+ #include " Firestore/core/src/core/pipeline_util.h"
2223#include " Firestore/core/src/remote/serializer.h"
2324
2425namespace firebase {
@@ -27,16 +28,35 @@ namespace api {
2728
2829RealtimePipeline::RealtimePipeline (
2930 std::vector<std::shared_ptr<EvaluableStage>> stages,
30- remote::Serializer serializer)
31- : stages_(std::move(stages)), serializer_(serializer) {
31+ std::unique_ptr<remote::Serializer> serializer)
32+ : stages_(std::move(stages)), serializer_(std::move(serializer)) {
33+ this ->rewritten_stages_ = core::RewriteStages (this ->stages ());
34+ }
35+
36+ RealtimePipeline::RealtimePipeline (const RealtimePipeline& other)
37+ : stages_(other.stages_),
38+ rewritten_stages_ (other.rewritten_stages_),
39+ serializer_(std::make_unique<remote::Serializer>(
40+ other.serializer_->database_id ())) {
41+ }
42+
43+ RealtimePipeline& RealtimePipeline::operator =(const RealtimePipeline& other) {
44+ if (this != &other) {
45+ stages_ = other.stages_ ;
46+ rewritten_stages_ = other.rewritten_stages_ ;
47+ serializer_ =
48+ std::make_unique<remote::Serializer>(other.serializer_ ->database_id ());
49+ }
50+ return *this ;
3251}
3352
3453RealtimePipeline RealtimePipeline::AddingStage (
3554 std::shared_ptr<EvaluableStage> stage) {
3655 auto copy = std::vector<std::shared_ptr<EvaluableStage>>(this ->stages_ );
3756 copy.push_back (stage);
3857
39- return {copy, serializer_};
58+ return {copy,
59+ std::make_unique<remote::Serializer>(serializer_->database_id ())};
4060}
4161
4262const std::vector<std::shared_ptr<EvaluableStage>>& RealtimePipeline::stages ()
@@ -49,13 +69,8 @@ RealtimePipeline::rewritten_stages() const {
4969 return this ->rewritten_stages_ ;
5070}
5171
52- void RealtimePipeline::SetRewrittentStages (
53- std::vector<std::shared_ptr<EvaluableStage>> stages) {
54- this ->rewritten_stages_ = std::move (stages);
55- }
56-
57- EvaluateContext RealtimePipeline::evaluate_context () {
58- return EvaluateContext (&serializer_);
72+ EvaluateContext RealtimePipeline::evaluate_context () const {
73+ return EvaluateContext (serializer_.get ());
5974}
6075
6176} // namespace api
0 commit comments