Index: tonic/dart_converter_wtf.h |
diff --git a/tonic/dart_converter.h b/tonic/dart_converter_wtf.h |
similarity index 53% |
copy from tonic/dart_converter.h |
copy to tonic/dart_converter_wtf.h |
index 47d9f8409d0468fe47ba819950a11769a6dc24a6..5a4874810410e39fe40c863d85f8a8fa2d34f382 100644 |
--- a/tonic/dart_converter.h |
+++ b/tonic/dart_converter_wtf.h |
@@ -2,180 +2,19 @@ |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
-#ifndef SKY_ENGINE_TONIC_DART_CONVERTER_H_ |
-#define SKY_ENGINE_TONIC_DART_CONVERTER_H_ |
+#ifndef SKY_ENGINE_TONIC_DART_CONVERTER_WTF_H_ |
+#define SKY_ENGINE_TONIC_DART_CONVERTER_WTF_H_ |
#include <string> |
-#include "tonic/dart_state.h" |
+#include "sky/engine/wtf/text/StringUTF8Adaptor.h" |
+#include "sky/engine/wtf/text/WTFString.h" |
+#include "tonic/dart_converter.h" |
#include "tonic/dart_string.h" |
#include "tonic/dart_string_cache.h" |
#include "tonic/dart_value.h" |
-#include "sky/engine/wtf/text/StringUTF8Adaptor.h" |
-#include "sky/engine/wtf/text/WTFString.h" |
namespace blink { |
-// DartConvert converts types back and forth from Sky to Dart. The template |
-// parameter |T| determines what kind of type conversion to perform. |
-template <typename T, typename Enable = void> |
-struct DartConverter { |
-}; |
- |
-// This is to work around the fact that typedefs do not create new types. If you |
-// have a typedef, and want it to use a different converter, specialize this |
-// template and override the types here. |
-// Ex: |
-// typedef int ColorType; // Want to use a different converter. |
-// class ColorConverterType {}; // Dummy type. |
-// template<> struct DartConvertType<ColorConverterType> { |
-// using ConverterType = ColorConverterType; |
-// using ValueType = ColorType; |
-// }; |
-template <typename T> |
-struct DartConverterTypes { |
- using ConverterType = T; |
- using ValueType = T; |
-}; |
- |
-//////////////////////////////////////////////////////////////////////////////// |
-// Boolean |
- |
-template <> |
-struct DartConverter<bool> { |
- static Dart_Handle ToDart(bool val) { return Dart_NewBoolean(val); } |
- |
- static void SetReturnValue(Dart_NativeArguments args, bool val) { |
- Dart_SetBooleanReturnValue(args, val); |
- } |
- |
- static bool FromDart(Dart_Handle handle) { |
- bool result = 0; |
- Dart_BooleanValue(handle, &result); |
- return result; |
- } |
- |
- static bool FromArguments(Dart_NativeArguments args, |
- int index, |
- Dart_Handle& exception) { |
- bool result = false; |
- Dart_GetNativeBooleanArgument(args, index, &result); |
- return result; |
- } |
-}; |
- |
-//////////////////////////////////////////////////////////////////////////////// |
-// Numbers |
- |
-template <typename T> |
-struct DartConverterInteger { |
- static Dart_Handle ToDart(T val) { return Dart_NewInteger(val); } |
- |
- static void SetReturnValue(Dart_NativeArguments args, T val) { |
- Dart_SetIntegerReturnValue(args, val); |
- } |
- |
- static T FromDart(Dart_Handle handle) { |
- int64_t result = 0; |
- Dart_IntegerToInt64(handle, &result); |
- return static_cast<T>(result); |
- } |
- |
- static T FromArguments(Dart_NativeArguments args, |
- int index, |
- Dart_Handle& exception) { |
- int64_t result = 0; |
- Dart_GetNativeIntegerArgument(args, index, &result); |
- return static_cast<T>(result); |
- } |
-}; |
- |
-template <> |
-struct DartConverter<int> : public DartConverterInteger<int> {}; |
- |
-template <> |
-struct DartConverter<unsigned> : public DartConverterInteger<unsigned> {}; |
- |
-template <> |
-struct DartConverter<long long> : public DartConverterInteger<long long> {}; |
- |
-template <> |
-struct DartConverter<unsigned long long> { |
- static Dart_Handle ToDart(unsigned long long val) { |
- // FIXME: WebIDL unsigned long long is guaranteed to fit into 64-bit |
- // unsigned, |
- // so we need a dart API for constructing an integer from uint64_t. |
- DCHECK(val <= 0x7fffffffffffffffLL); |
- return Dart_NewInteger(static_cast<int64_t>(val)); |
- } |
- |
- static void SetReturnValue(Dart_NativeArguments args, |
- unsigned long long val) { |
- DCHECK(val <= 0x7fffffffffffffffLL); |
- Dart_SetIntegerReturnValue(args, val); |
- } |
- |
- static unsigned long long FromDart(Dart_Handle handle) { |
- int64_t result = 0; |
- Dart_IntegerToInt64(handle, &result); |
- return result; |
- } |
- |
- static unsigned long long FromArguments(Dart_NativeArguments args, |
- int index, |
- Dart_Handle& exception) { |
- int64_t result = 0; |
- Dart_GetNativeIntegerArgument(args, index, &result); |
- return result; |
- } |
-}; |
- |
-template <typename T> |
-struct DartConverterFloatingPoint { |
- static Dart_Handle ToDart(T val) { return Dart_NewDouble(val); } |
- |
- static void SetReturnValue(Dart_NativeArguments args, T val) { |
- Dart_SetDoubleReturnValue(args, val); |
- } |
- |
- static T FromDart(Dart_Handle handle) { |
- double result = 0; |
- Dart_DoubleValue(handle, &result); |
- return result; |
- } |
- |
- static T FromArguments(Dart_NativeArguments args, |
- int index, |
- Dart_Handle& exception) { |
- double result = 0; |
- Dart_GetNativeDoubleArgument(args, index, &result); |
- return result; |
- } |
-}; |
- |
-template <> |
-struct DartConverter<float> : public DartConverterFloatingPoint<float> {}; |
- |
-template <> |
-struct DartConverter<double> : public DartConverterFloatingPoint<double> {}; |
- |
-//////////////////////////////////////////////////////////////////////////////// |
-// Enums |
- |
-template <typename T> |
-struct DartConverterEnum { |
- static T FromArguments(Dart_NativeArguments args, |
- int index, |
- Dart_Handle& exception) { |
- Dart_Handle enum_handle = Dart_GetNativeArgument(args, index); |
- Dart_Handle index_handle = |
- Dart_GetField(enum_handle, DartState::Current()->index_handle()); |
- |
- uint64_t enum_index = 0; |
- Dart_IntegerToUint64(index_handle, &enum_index); |
- return static_cast<T>(enum_index); |
- } |
-}; |
- |
//////////////////////////////////////////////////////////////////////////////// |
// Strings |
@@ -358,26 +197,15 @@ Dart_Handle ToDart(const T& object) { |
return DartConverter<T>::ToDart(object); |
} |
-//////////////////////////////////////////////////////////////////////////////// |
-// std::string support (slower, but more convienent for some clients) |
- |
-inline Dart_Handle StdStringToDart(const std::string& val) { |
- return Dart_NewStringFromUTF8(reinterpret_cast<const uint8_t*>(val.data()), |
- val.length()); |
-} |
- |
-inline std::string StdStringFromDart(Dart_Handle handle) { |
- String string = StringFromDart(handle); |
- StringUTF8Adaptor utf8(string); |
- return std::string(utf8.data(), utf8.length()); |
-} |
- |
- |
-// Alias Dart_NewStringFromCString for less typing. |
-inline Dart_Handle ToDart(const char* val) { |
- return Dart_NewStringFromCString(val); |
-} |
+template<typename T> |
+struct DartConverter<RefPtr<T>> { |
+ static Dart_Handle ToDart(RefPtr<T> val) { |
+ return DartConverter<T*>::ToDart(val.get()); |
+ } |
-} // namespace blink |
+ static RefPtr<T> FromDart(Dart_Handle handle) { |
+ return DartConverter<T*>::FromDart(handle); |
+ } |
+}; |
-#endif // SKY_ENGINE_TONIC_DART_CONVERTER_H_ |
+#endif // SKY_ENGINE_TONIC_DART_CONVERTER_WTF_H_ |