X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fgame%2Fcomponent.h;h=e97b511a6ed658edbc9c221b2ca14a7ffa2927f7;hb=12c863fc1bc5456a4b3aceacc88904d76bd1d8bb;hp=44927ffd2e73c640f9d8a609f4e4b66984633572;hpb=a99b57a74252fd3de649d544d070b747f91fcf4d;p=libs%2Fgame.git diff --git a/source/game/component.h b/source/game/component.h index 44927ff..e97b511 100644 --- a/source/game/component.h +++ b/source/game/component.h @@ -2,13 +2,15 @@ #define MSP_GAME_COMPONENT_H_ #include +#include "accessguard.h" #include "handle.h" +#include "mspgame_api.h" namespace Msp::Game { class Entity; -class Component +class MSPGAME_API Component { protected: Handle entity; @@ -34,7 +36,7 @@ protected: BufferedComponent(Handle e): Component(e) { } - const T &read() const { return data[read_index]; } + const T &read() const; T &write(); public: @@ -42,9 +44,21 @@ public: virtual void commit_tick() { if(written) read_index = write_index; } }; +template +const T &BufferedComponent::read() const +{ +#ifdef DEBUG + AccessGuard::get_instance().check>(); +#endif + return data[read_index]; +} + template T &BufferedComponent::write() { +#ifdef DEBUG + AccessGuard::get_instance().check>(); +#endif if(!written && write_index!=read_index) { data[write_index] = data[read_index];