| Index: experimental/c_salt/converting_visitor.h
|
| diff --git a/experimental/c_salt/converting_visitor.h b/experimental/c_salt/converting_visitor.h
|
| deleted file mode 100644
|
| index f9130bca6331211a73bdabfc9e545758c01daba0..0000000000000000000000000000000000000000
|
| --- a/experimental/c_salt/converting_visitor.h
|
| +++ /dev/null
|
| @@ -1,121 +0,0 @@
|
| -// Copyright 2010 The Ginsu Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can
|
| -// be found in the LICENSE file.
|
| -
|
| -#ifndef C_SALT_CONVERTING_VISITOR_H_
|
| -#define C_SALT_CONVERTING_VISITOR_H_
|
| -
|
| -#include <string>
|
| -
|
| -#include "boost/shared_ptr.hpp"
|
| -#include "boost/variant/static_visitor.hpp"
|
| -#include "c_salt/scriptable_native_object_ptrs.h"
|
| -#include "c_salt/scriptable_native_object.h"
|
| -#include "c_salt/scripting_interface_ptrs.h"
|
| -
|
| -namespace c_salt {
|
| -
|
| -class ScriptingInterface;
|
| -
|
| -// The following set of ConvertingVisitor template specializations implement the
|
| -// Visitor concept, as described here:
|
| -// http://live.boost.org/doc/libs/1_41_0/doc/html/variant/reference.html
|
| -// #variant.concepts.static-visitor
|
| -// Each instantiation of ConvertingVisitor can be passed as a static visitor to
|
| -// the boost::apply_visitor function. ConvertingVisitor<TargetType> converts
|
| -// the value held by the boost variant in to type TargetType.
|
| -//
|
| -// This one is the default, which has no implementation. We only have
|
| -// specializations implement ConvertingVisitor, as we want to have very
|
| -// fine-grained control of what each conversion does depending on the type.
|
| -template <class TargetType>
|
| -class ConvertingVisitor;
|
| -
|
| -template <>
|
| -class ConvertingVisitor<std::string>
|
| - : public boost::static_visitor<std::string> {
|
| - public:
|
| - std::string operator()(bool value) const;
|
| - std::string operator()(int32_t value) const;
|
| - std::string operator()(double value) const;
|
| - // In this case, we can just pass the same const-reference out, since it
|
| - // exists in the variant. In all other cases, we have to copy because we are
|
| - // creating a std::string on the stack.
|
| - const std::string& operator()(const std::string& value) const;
|
| - std::string operator()(const SharedScriptingInterface& value) const;
|
| -};
|
| -
|
| -template <>
|
| -class ConvertingVisitor<SharedScriptingInterface >
|
| - : public boost::static_visitor<SharedScriptingInterface > {
|
| - public:
|
| - template <class T>
|
| - SharedScriptingInterface operator()(T value) const {
|
| - // This is a catch all for types other than shared_ptr to
|
| - // ScriptingInterface, none of which can be converted to
|
| - // shared_ptr<ScriptingInterface>, so we just return a default-initialized
|
| - // shared_ptr.
|
| - return SharedScriptingInterface();
|
| - }
|
| - SharedScriptingInterface operator()(
|
| - const SharedScriptingInterface& value) const;
|
| -};
|
| -
|
| -// This specialization handles getting a ScriptableNativeObject. Currently, we
|
| -// do NOT support converting to boost::shared_ptr<T> where T is a class which
|
| -// inherits from ScriptableNativeObject. To support it safely, we would require
|
| -// a dynamic_cast to verify the type is correct, which would violate the Google
|
| -// style guide by requiring RTTI. To support it unsafely, we could static_cast,
|
| -// but that would make strange failures happen if the user got it even slightly
|
| -// wrong. This forces them to get a SharedScriptableNativeObject and then do
|
| -// the cast themselves, which at least puts any failures at the right place
|
| -// (user code).
|
| -template <>
|
| -class ConvertingVisitor<SharedScriptableNativeObject>
|
| - : public boost::static_visitor<SharedScriptableNativeObject> {
|
| - public:
|
| - template <class T>
|
| - SharedScriptableNativeObject operator()(T value) const {
|
| - // This is a catch all for types other than shared_ptr to
|
| - // ScriptingInterface, none of which can be converted to
|
| - // shared_ptr<ScriptingInterface>, so we just return a default-initialized
|
| - // shared_ptr.
|
| - return SharedScriptableNativeObject();
|
| - }
|
| - SharedScriptableNativeObject operator()(
|
| - const SharedScriptingInterface& value) const;
|
| -};
|
| -
|
| -template <>
|
| -class ConvertingVisitor<bool> : public boost::static_visitor<bool> {
|
| - public:
|
| - bool operator()(bool value) const;
|
| - bool operator()(int32_t value) const;
|
| - bool operator()(double value) const;
|
| - bool operator()(const std::string& value) const;
|
| - bool operator()(const SharedScriptingInterface& value) const;
|
| -};
|
| -
|
| -template <>
|
| -class ConvertingVisitor<int32_t> : public boost::static_visitor<int32_t> {
|
| - public:
|
| - int32_t operator()(bool value) const;
|
| - int32_t operator()(int32_t value) const;
|
| - int32_t operator()(double value) const;
|
| - int32_t operator()(const std::string& value) const;
|
| - int32_t operator()(const SharedScriptingInterface& value) const;
|
| -};
|
| -
|
| -template <>
|
| -class ConvertingVisitor<double> : public boost::static_visitor<double> {
|
| - public:
|
| - double operator()(bool value) const;
|
| - double operator()(int32_t value) const;
|
| - double operator()(double value) const;
|
| - double operator()(const std::string& value) const;
|
| - double operator()(const SharedScriptingInterface& value) const;
|
| -};
|
| -
|
| -} // namespace c_salt
|
| -
|
| -#endif // C_SALT_CONVERTING_VISITOR_H_
|
|
|