RecordedStatuses.cpp [plain text]
#include "config.h"
#include "RecordedStatuses.h"
namespace JSC {
RecordedStatuses& RecordedStatuses::operator=(RecordedStatuses&& other)
{
calls = WTFMove(other.calls);
gets = WTFMove(other.gets);
puts = WTFMove(other.puts);
ins = WTFMove(other.ins);
shrinkToFit();
return *this;
}
RecordedStatuses::RecordedStatuses(RecordedStatuses&& other)
{
*this = WTFMove(other);
}
CallLinkStatus* RecordedStatuses::addCallLinkStatus(const CodeOrigin& codeOrigin, const CallLinkStatus& status)
{
auto statusPtr = std::make_unique<CallLinkStatus>(status);
CallLinkStatus* result = statusPtr.get();
calls.append(std::make_pair(codeOrigin, WTFMove(statusPtr)));
return result;
}
GetByIdStatus* RecordedStatuses::addGetByIdStatus(const CodeOrigin& codeOrigin, const GetByIdStatus& status)
{
auto statusPtr = std::make_unique<GetByIdStatus>(status);
GetByIdStatus* result = statusPtr.get();
gets.append(std::make_pair(codeOrigin, WTFMove(statusPtr)));
return result;
}
PutByIdStatus* RecordedStatuses::addPutByIdStatus(const CodeOrigin& codeOrigin, const PutByIdStatus& status)
{
auto statusPtr = std::make_unique<PutByIdStatus>(status);
PutByIdStatus* result = statusPtr.get();
puts.append(std::make_pair(codeOrigin, WTFMove(statusPtr)));
return result;
}
InByIdStatus* RecordedStatuses::addInByIdStatus(const CodeOrigin& codeOrigin, const InByIdStatus& status)
{
auto statusPtr = std::make_unique<InByIdStatus>(status);
InByIdStatus* result = statusPtr.get();
ins.append(std::make_pair(codeOrigin, WTFMove(statusPtr)));
return result;
}
void RecordedStatuses::markIfCheap(SlotVisitor& slotVisitor)
{
for (auto& pair : gets)
pair.second->markIfCheap(slotVisitor);
for (auto& pair : puts)
pair.second->markIfCheap(slotVisitor);
for (auto& pair : ins)
pair.second->markIfCheap(slotVisitor);
}
void RecordedStatuses::finalizeWithoutDeleting()
{
auto finalize = [] (auto& vector) {
for (auto& pair : vector) {
if (!pair.second->finalize())
*pair.second = { };
}
};
forEachVector(finalize);
}
void RecordedStatuses::finalize()
{
auto finalize = [] (auto& vector) {
vector.removeAllMatching(
[&] (auto& pair) -> bool {
return !*pair.second || !pair.second->finalize();
});
vector.shrinkToFit();
};
forEachVector(finalize);
}
void RecordedStatuses::shrinkToFit()
{
forEachVector([] (auto& vector) { vector.shrinkToFit(); });
}
}