44 #include <boost/range/any_range.hpp>
45 #include <boost/serialization/access.hpp>
46 #include <boost/serialization/base_object.hpp>
47 #include <boost/serialization/nvp.hpp>
115 : m_frame(0), m_symbol(0), m_value(
Symbol::missingArgument()),
116 #ifdef PROVENANCE_TRACKING
119 m_origin(
MISSING), m_active(false),
214 #ifdef PROVENANCE_TRACKING
282 m_frame->monitorRead(*
this);
316 #ifdef PROVENANCE_TRACKING
374 friend class boost::serialization::access;
379 #ifdef PROVENANCE_TRACKING
382 unsigned char m_origin;
390 template<
class Archive>
391 void serialize(Archive & ar,
const unsigned int version);
401 typedef boost::any_range<
const Binding,
402 boost::forward_traversal_tag,
413 : m_cache_count(0), m_locked(false),
414 m_read_monitored(false), m_write_monitored(false)
427 : m_cache_count(0), m_locked(source.m_locked),
428 m_read_monitored(false), m_write_monitored(false)
482 __attribute__((fastcall))
498 virtual const Binding*
binding(
const Symbol* symbol)
const = 0;
670 s_read_monitor = new_monitor;
695 s_write_monitor = new_monitor;
704 virtual std::size_t
size()
const = 0;
714 std::vector<const Symbol*>
symbols(
bool include_dotsymbols)
const;
736 if (m_cache_count > 0)
744 friend class boost::serialization::access;
746 static monitor s_read_monitor, s_write_monitor;
748 unsigned char m_cache_count;
752 mutable bool m_read_monitored : 1;
753 mutable bool m_write_monitored : 1;
760 friend class Binding;
768 void flush(
const Symbol* sym);
775 void monitorRead(
const Binding& bdg)
const
777 if (m_read_monitored)
781 void monitorWrite(
const Binding& bdg)
const
783 if (m_write_monitored)
784 s_write_monitor(bdg);
787 template<
class Archive>
788 void serialize (Archive & ar,
const unsigned int version);
791 virtual void v_clear() = 0;
792 virtual bool v_erase(
const Symbol* symbol) = 0;
793 virtual Binding* v_obtainBinding(
const Symbol* symbol) = 0;
853 template<
class Archive>
854 void Frame::Binding::serialize(Archive & ar,
const unsigned int version)
857 const Provenance* prov = 0;
858 #ifdef PROVENANCE_TRACKING
862 #ifdef PROVENANCE_TRACKING
865 ar & BOOST_SERIALIZATION_NVP(m_origin);
866 ar & BOOST_SERIALIZATION_NVP(m_active);
867 ar & BOOST_SERIALIZATION_NVP(m_locked);
870 template<
class Archive>
871 void Frame::serialize (Archive & ar,
const unsigned int version) {
872 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(GCNode);
873 bool locked = m_locked;
874 ar & BOOST_SERIALIZATION_NVP(locked);