diff options
author | Tobias Grimm <tobias@e-tobi.loc> | 2009-02-14 23:25:05 +0100 |
---|---|---|
committer | Tobias Grimm <tobias@e-tobi.loc> | 2009-02-14 23:25:05 +0100 |
commit | 2bae6457006474655f971891a92341b1ae34840e (patch) | |
tree | 30a813fdbb1c096a08d7c35dd59fafc3f65154f4 /src/RubyObjectTracker.h | |
download | vdr-plugin-scripting-branches/v0.0.1.tar.gz vdr-plugin-scripting-branches/v0.0.1.tar.bz2 |
Initial commitv0.0.1branches/v0.0.1
Diffstat (limited to 'src/RubyObjectTracker.h')
-rw-r--r-- | src/RubyObjectTracker.h | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/src/RubyObjectTracker.h b/src/RubyObjectTracker.h new file mode 100644 index 0000000..aff6768 --- /dev/null +++ b/src/RubyObjectTracker.h @@ -0,0 +1,55 @@ +/* + * vdr-scripting - A plugin for the Linux Video Disk Recorder + * Copyright (c) 2009 Tobias Grimm <vdr@e-tobi.net> + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License along with + * this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +#ifndef __RUBY_OBJECT_TRACKER_H +#define __RUBY_OBJECT_TRACKER_H + +#include<map> +#include<ruby.h> + +class TrackedRubyObject +{ + private: + VALUE _rubyObject; + bool _keepAlive; + + public: + TrackedRubyObject(); + TrackedRubyObject(VALUE rubyObject, bool keepAlive); + VALUE RubyObject(); + void KeepAlive(bool keepAlive); + void Mark(); +}; + +class RubyObjectTracker +{ + private: + std::map<void*, TrackedRubyObject> _map; + + public: + void Track(void* cppPointer, VALUE rubyObject); + void Untrack(void* cppPointer); + VALUE GetTrackedRubyObject(void* cppPointer); + void KeepRubyObjectAlive(void* cppPointer); + void MarkTrackedRubyObjects(); + static void MarkTrackedRubyObjects(void* self); +}; + +#endif |