| Index: base/json/json_value_converter.h
|
| diff --git a/base/json/json_value_converter.h b/base/json/json_value_converter.h
|
| index 0bb131cba39ee6ba95db4be48d5c73eb1d33935f..4ae8b8eff1dc433c61ef7eed60afe1b7e0c15ff8 100644
|
| --- a/base/json/json_value_converter.h
|
| +++ b/base/json/json_value_converter.h
|
| @@ -9,7 +9,6 @@
|
| #include <string>
|
| #include <vector>
|
|
|
| -#include "base/base_export.h"
|
| #include "base/basictypes.h"
|
| #include "base/logging.h"
|
| #include "base/memory/scoped_ptr.h"
|
| @@ -92,11 +91,13 @@ class JSONValueConverter;
|
|
|
| namespace internal {
|
|
|
| +template<typename StructType>
|
| class FieldConverterBase {
|
| public:
|
| - BASE_EXPORT explicit FieldConverterBase(const std::string& path);
|
| - BASE_EXPORT virtual ~FieldConverterBase();
|
| - virtual bool ConvertField(const base::Value& value, void* obj) const = 0;
|
| + explicit FieldConverterBase(const std::string& path) : field_path_(path) {}
|
| + virtual ~FieldConverterBase() {}
|
| + virtual bool ConvertField(const base::Value& value, StructType* obj)
|
| + const = 0;
|
| const std::string& field_path() const { return field_path_; }
|
|
|
| private:
|
| @@ -112,19 +113,18 @@ class ValueConverter {
|
| };
|
|
|
| template <typename StructType, typename FieldType>
|
| -class FieldConverter : public FieldConverterBase {
|
| +class FieldConverter : public FieldConverterBase<StructType> {
|
| public:
|
| explicit FieldConverter(const std::string& path,
|
| FieldType StructType::* field,
|
| ValueConverter<FieldType>* converter)
|
| - : FieldConverterBase(path),
|
| + : FieldConverterBase<StructType>(path),
|
| field_pointer_(field),
|
| value_converter_(converter) {
|
| }
|
|
|
| virtual bool ConvertField(
|
| - const base::Value& value, void* obj) const OVERRIDE {
|
| - StructType* dst = reinterpret_cast<StructType*>(obj);
|
| + const base::Value& value, StructType* dst) const OVERRIDE {
|
| return value_converter_->Convert(value, &(dst->*field_pointer_));
|
| }
|
|
|
| @@ -423,7 +423,8 @@ class JSONValueConverter {
|
| return false;
|
|
|
| for(size_t i = 0; i < fields_.size(); ++i) {
|
| - const internal::FieldConverterBase* field_converter = fields_[i];
|
| + const internal::FieldConverterBase<StructType>* field_converter =
|
| + fields_[i];
|
| base::Value* field = NULL;
|
| if (dictionary_value->Get(field_converter->field_path(), &field)) {
|
| if (!field_converter->ConvertField(*field, output)) {
|
| @@ -436,7 +437,7 @@ class JSONValueConverter {
|
| }
|
|
|
| private:
|
| - ScopedVector<internal::FieldConverterBase> fields_;
|
| + ScopedVector<internal::FieldConverterBase<StructType> > fields_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(JSONValueConverter);
|
| };
|
|
|