T &write();
public:
- virtual void prepare_tick() { write_index = 1-read_index; written = false; }
+ virtual void prepare_tick() { write_index = read_index+1; written = false; }
virtual void commit_tick() { if(written) read_index = write_index; }
+ uint8_t get_read_generation() const { return read_index; }
+ uint8_t get_write_generation() const { return write_index; }
};
template<typename T>
#ifdef DEBUG
AccessGuard::get_instance().check<AccessGuard::Read<T>>();
#endif
- return data[read_index];
+ return data[read_index&1];
}
template<typename T>
#endif
if(!written && write_index!=read_index)
{
- data[write_index] = data[read_index];
+ data[write_index&1] = data[read_index&1];
written = true;
}
- return data[write_index];
+ return data[write_index&1];
}
} // namespace Msp::Game