AutoWriteBarrierIterator.h [plain text]
#pragma once
#ifndef __AUTO_WRITEBARRIERITERATOR__
#define __AUTO_WRITEBARRIERITERATOR__
#include "AutoAdmin.h"
#include "AutoDefs.h"
#include "AutoLarge.h"
#include "AutoListTypes.h"
#include "AutoRangeIterator.h"
#include "AutoRegion.h"
#include "AutoSubzone.h"
#include "AutoWriteBarrier.h"
#include "AutoZone.h"
namespace Auto {
template <class Visitor> bool visitWriteBarriers(Zone *zone, Visitor &visitor) {
for (Region *region = zone->region_list(); region != NULL; region = region->next()) {
SubzoneRangeIterator iterator(region->subzone_range());
while (Subzone *subzone = iterator.next()) {
WriteBarrier& wb = subzone->write_barrier();
if (!visitor.visit(zone, wb)) return false;
}
}
for (Large *large = zone->large_list(); large; large = large->next()) {
WriteBarrier& wb = large->write_barrier();
if (!visitor.visit(zone, wb)) return false;
}
return true;
}
template<class T>class WriteBarrierIterator {
private:
Zone *_zone; T &_visitor;
public:
WriteBarrierIterator(Zone *zone, T &visitor) : _zone(zone), _visitor(visitor) {}
inline bool visit() {
return visitWriteBarriers(_zone, _visitor);
}
};
};
#endif // __AUTO_WRITEBARRIERITERATOR__