#ifndef SUIFKERNEL__WALKER_H__
#define SUIFKERNEL__WALKER_H__
#include "iokernel_forwarders.h"
class Walker {
public:
enum ApplyStatus {
Continue,
Stop,
Abort,
Truncate,
Replaced
}; // enum ApplyStatus
Walker(SuifEnv *the_env);
virtual ApplyStatus operator () (Address address,
const MetaClass *_meta) = 0;
virtual bool is_walkable(Address address,
bool is_owned,
const MetaClass *_meta);
virtual bool is_visitable(Address address,
const MetaClass *_meta) const;
void set_post_order();
void set_pre_order();
bool get_is_pre_order() const;
void set_address(Address new_address);
Address get_address() const;
SuifEnv *get_env() const;
void set_parent(Address addr);
Address get_parent() const;
private:
SuifEnv *_env;
bool _is_pre_order;
Address _address;
Address _parent;
};
#endif