aboutsummaryrefslogtreecommitdiff
path: root/src/support/error/error_capacitor.cc
blob: 58cfb81e03bf0ac14798dab64d34b16cb87bf5c5 (plain)
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
#include "error_capacitor.h"

namespace InputXSLT {

ErrorCapacitor::ErrorCapacitor(ErrorMultiplexer* multiplexer):
	multiplexer_(multiplexer),
	error_cache_(new error_cache()) {
	this->multiplexer_->connectReceiver(this);
}

ErrorCapacitor::~ErrorCapacitor() {
	this->multiplexer_->disconnectReceiver(this);
}

void ErrorCapacitor::discharge() {
	if ( !this->error_cache_->empty() ) {
		throw exception(std::move(this->error_cache_));
	}
}

void ErrorCapacitor::receive(
	const ErrorMultiplexer::ErrorType type,
	const std::string& message
) {
	if ( type == ErrorMultiplexer::ErrorType::Error ) {
		this->error_cache_->emplace_back(message);
	}
}

ErrorCapacitor::exception::exception(error_cache_ptr ptr):
	error_cache_(std::move(ptr)) { }

auto ErrorCapacitor::exception::getCachedErrors() const -> const error_cache* {
	return this->error_cache_.get();
}

}