summaryrefslogtreecommitdiff
path: root/ruby/src/IceRuby/ObjectFactory.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ruby/src/IceRuby/ObjectFactory.cpp')
-rw-r--r--ruby/src/IceRuby/ObjectFactory.cpp179
1 files changed, 0 insertions, 179 deletions
diff --git a/ruby/src/IceRuby/ObjectFactory.cpp b/ruby/src/IceRuby/ObjectFactory.cpp
deleted file mode 100644
index ed37fdd86fb..00000000000
--- a/ruby/src/IceRuby/ObjectFactory.cpp
+++ /dev/null
@@ -1,179 +0,0 @@
-// **********************************************************************
-//
-// Copyright (c) 2003-2015 ZeroC, Inc. All rights reserved.
-//
-// This copy of Ice is licensed to you under the terms described in the
-// ICE_LICENSE file included in this distribution.
-//
-// **********************************************************************
-
-#include <ObjectFactory.h>
-#include <Types.h>
-#include <Util.h>
-#include <Ice/LocalException.h>
-
-using namespace std;
-using namespace IceRuby;
-
-IceRuby::ObjectFactory::ObjectFactory()
-{
-}
-
-IceRuby::ObjectFactory::~ObjectFactory()
-{
- assert(_valueFactoryMap.empty());
- assert(_objectFactoryMap.empty());
-}
-
-Ice::ObjectPtr
-IceRuby::ObjectFactory::create(const string& id)
-{
- Lock sync(*this);
-
- //
- // Get the type information.
- //
- ClassInfoPtr info;
- if(id == Ice::Object::ice_staticId())
- {
- //
- // When the ID is that of Ice::Object, it indicates that the stream has not
- // found a factory and is providing us an opportunity to preserve the object.
- //
- info = lookupClassInfo("::Ice::UnknownSlicedObject");
- }
- else
- {
- info = lookupClassInfo(id);
- }
-
- if(!info)
- {
- return 0;
- }
-
- //
- // Check if the application has registered a factory for this id.
- //
- FactoryMap::iterator p = _valueFactoryMap.find(id);
- if(p != _valueFactoryMap.end())
- {
- //
- // Invoke the create method on the Ruby factory object.
- //
- volatile VALUE str = createString(id);
- volatile VALUE obj = callRuby(rb_funcall, p->second, rb_intern("create"), 1, str);
- if(NIL_P(obj))
- {
- return 0;
- }
- return new ObjectReader(obj, info);
- }
-
- //
- // Instantiate the object.
- //
- volatile VALUE obj = callRuby(rb_class_new_instance, 0, reinterpret_cast<VALUE*>(0), info->rubyClass);
- assert(!NIL_P(obj));
- return new ObjectReader(obj, info);
-}
-
-void
-IceRuby::ObjectFactory::destroy()
-{
- Lock sync(*this);
-
- for(FactoryMap::iterator p = _objectFactoryMap.begin(); p != _objectFactoryMap.end(); ++p)
- {
- //
- // Invoke the destroy method on each registered Ruby object factory.
- //
- try
- {
- callRuby(rb_funcall, p->second, rb_intern("destroy"), 0);
- }
- catch(const RubyException&)
- {
- // Ignore.
- }
- }
-
- _valueFactoryMap.clear();
- _objectFactoryMap.clear();
-}
-
-void
-IceRuby::ObjectFactory::addValueFactory(VALUE factory, const string& id)
-{
- Lock sync(*this);
-
- FactoryMap::iterator p = _valueFactoryMap.find(id);
- if(p != _valueFactoryMap.end())
- {
- Ice::AlreadyRegisteredException ex(__FILE__, __LINE__);
- ex.kindOfObject = "value factory";
- ex.id = id;
- throw ex;
- }
-
- _valueFactoryMap.insert(FactoryMap::value_type(id, factory));
-}
-
-void
-IceRuby::ObjectFactory::addObjectFactory(VALUE factory, const string& id)
-{
- Lock sync(*this);
-
- FactoryMap::iterator p = _valueFactoryMap.find(id);
- if(p != _valueFactoryMap.end())
- {
- Ice::AlreadyRegisteredException ex(__FILE__, __LINE__);
- ex.kindOfObject = "value factory";
- ex.id = id;
- throw ex;
- }
-
- _valueFactoryMap.insert(FactoryMap::value_type(id, factory));
- _objectFactoryMap.insert(FactoryMap::value_type(id, factory));
-}
-
-VALUE
-IceRuby::ObjectFactory::findValueFactory(const string& id)
-{
- Lock sync(*this);
-
- FactoryMap::iterator p = _valueFactoryMap.find(id);
- if(p == _valueFactoryMap.end())
- {
- return Qnil;
- }
-
- return p->second;
-}
-
-VALUE
-IceRuby::ObjectFactory::findObjectFactory(const string& id)
-{
- Lock sync(*this);
-
- FactoryMap::iterator p = _objectFactoryMap.find(id);
- if(p == _objectFactoryMap.end())
- {
- return Qnil;
- }
-
- return p->second;
-}
-
-void
-IceRuby::ObjectFactory::mark()
-{
- for(FactoryMap::iterator p = _valueFactoryMap.begin(); p != _valueFactoryMap.end(); ++p)
- {
- rb_gc_mark(p->second);
- }
- for(FactoryMap::iterator p = _objectFactoryMap.begin(); p != _objectFactoryMap.end(); ++p)
- {
- rb_gc_mark(p->second);
- }
-}