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 38 39 40 41 42 43 44 45 46 47 48 49 50
|
#include "stdafx.h"
#include "Walker.h"
#include "Format.h"
namespace storm {
struct PtrScanner {
typedef int Result;
typedef PtrWalker *Source;
PtrScanner(Source &source) : walker(source) {}
PtrWalker *walker;
inline ScanOption object(void *start, void *end) { return scanAll; }
inline bool fix1(void *) { return true; }
inline Result fix2(void **ptr) {
walker->exactPointer(ptr);
return 0;
}
inline bool fixHeader1(GcType *) { return true; }
inline Result fixHeader2(GcType **ptr) {
walker->header(ptr);
return 0;
}
};
void PtrWalker::fixed(void *inspect) {
PtrWalker *me = this;
fmt::Scan<PtrScanner>::objects(me, inspect, fmt::skip(inspect));
}
void PtrWalker::object(RootObject *inspect) {
PtrWalker *me = this;
fmt::Scan<PtrScanner>::objects(me, inspect, fmt::skip(inspect));
}
void PtrWalker::array(void *inspect) {
PtrWalker *me = this;
fmt::Scan<PtrScanner>::objects(me, inspect, fmt::skip(inspect));
}
void PtrWalker::code(void *inspect) {
PtrWalker *me = this;
fmt::Scan<PtrScanner>::objects(me, inspect, fmt::skip(inspect));
}
}
|