#pragma once
#include <panda/exception.h>
#include <panda/refcnt.h>
#include <panda/function.h>
#include <functional>
#include "PerlTraceInfo.h"
namespace xs {
struct DualTrace: public panda::Refcnt {
using BacktraceInfoFn = panda::function<panda::BacktraceInfoSP>;
DualTrace() noexcept {};
panda::BacktraceInfoSP get_c_trace() noexcept;
PerlTraceInfoSP get_perl_trace() noexcept;
void set_c_trace(BacktraceInfoFn&& producer) noexcept { c_trace_producer = std::move(producer); }
void set_perl_trace(BacktraceInfoFn&& producer) noexcept { perl_trace_producer = std::move(producer); }
panda::string to_string() noexcept;
private:
panda::BacktraceInfoSP c_trace_cached;
BacktraceInfoFn c_trace_producer;
PerlTraceInfoSP perl_trace_cached;
BacktraceInfoFn perl_trace_producer;
};
}