| // Copyright 2018 The Chromium 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 MEDIA_LEARNING_MOJO_PUBLIC_CPP_LEARNING_MOJOM_TRAITS_H_ |
| #define MEDIA_LEARNING_MOJO_PUBLIC_CPP_LEARNING_MOJOM_TRAITS_H_ |
| |
| #include <vector> |
| |
| #include "base/component_export.h" |
| #include "media/learning/common/learning_task_controller.h" |
| #include "media/learning/common/value.h" |
| #include "media/learning/mojo/public/mojom/learning_types.mojom-shared.h" |
| #include "mojo/public/cpp/bindings/struct_traits.h" |
| |
| namespace mojo { |
| |
| template <> |
| struct COMPONENT_EXPORT(MEDIA_LEARNING_SHARED_TYPEMAP_TRAITS) |
| StructTraits<media::learning::mojom::LabelledExampleDataView, |
| media::learning::LabelledExample> { |
| static const std::vector<media::learning::FeatureValue>& features( |
| const media::learning::LabelledExample& e) { |
| return e.features; |
| } |
| static media::learning::TargetValue target_value( |
| const media::learning::LabelledExample& e) { |
| return e.target_value; |
| } |
| |
| static bool Read(media::learning::mojom::LabelledExampleDataView data, |
| media::learning::LabelledExample* out_example); |
| }; |
| |
| template <> |
| struct COMPONENT_EXPORT(MEDIA_LEARNING_SHARED_TYPEMAP_TRAITS) |
| StructTraits<media::learning::mojom::FeatureValueDataView, |
| media::learning::FeatureValue> { |
| static double value(const media::learning::FeatureValue& e) { |
| return e.value(); |
| } |
| static bool Read(media::learning::mojom::FeatureValueDataView data, |
| media::learning::FeatureValue* out_feature_value); |
| }; |
| |
| template <> |
| struct COMPONENT_EXPORT(MEDIA_LEARNING_SHARED_TYPEMAP_TRAITS) |
| StructTraits<media::learning::mojom::TargetValueDataView, |
| media::learning::TargetValue> { |
| static double value(const media::learning::TargetValue& e) { |
| return e.value(); |
| } |
| static bool Read(media::learning::mojom::TargetValueDataView data, |
| media::learning::TargetValue* out_target_value); |
| }; |
| |
| template <> |
| struct COMPONENT_EXPORT(MEDIA_LEARNING_SHARED_TYPEMAP_TRAITS) |
| StructTraits<media::learning::mojom::ObservationCompletionDataView, |
| media::learning::ObservationCompletion> { |
| static media::learning::TargetValue target_value( |
| const media::learning::ObservationCompletion& e) { |
| return e.target_value; |
| } |
| static media::learning::WeightType weight( |
| const media::learning::ObservationCompletion& e) { |
| return e.weight; |
| } |
| static bool Read( |
| media::learning::mojom::ObservationCompletionDataView data, |
| media::learning::ObservationCompletion* out_observation_completion); |
| }; |
| |
| template <> |
| struct COMPONENT_EXPORT(MEDIA_LEARNING_SHARED_TYPEMAP_TRAITS) |
| StructTraits<media::learning::mojom::TargetHistogramPairDataView, |
| media::learning::TargetHistogramPair> { |
| static media::learning::TargetValue target_value( |
| const media::learning::TargetHistogramPair& e) { |
| return e.target_value; |
| } |
| static double count(const media::learning::TargetHistogramPair& e) { |
| return e.count; |
| } |
| static bool Read(media::learning::mojom::TargetHistogramPairDataView data, |
| media::learning::TargetHistogramPair* out_pair); |
| }; |
| |
| template <> |
| struct COMPONENT_EXPORT(MEDIA_LEARNING_SHARED_TYPEMAP_TRAITS) |
| StructTraits<media::learning::mojom::TargetHistogramDataView, |
| media::learning::TargetHistogram> { |
| static std::vector<media::learning::TargetHistogramPair> pairs( |
| const media::learning::TargetHistogram& e) { |
| std::vector<media::learning::TargetHistogramPair> pairs; |
| for (auto const& entry : e.counts_) { |
| pairs.push_back({entry.first, entry.second}); |
| } |
| |
| return pairs; |
| } |
| |
| static bool Read(media::learning::mojom::TargetHistogramDataView data, |
| media::learning::TargetHistogram* out_target_histogram); |
| }; |
| |
| } // namespace mojo |
| |
| #endif // MEDIA_LEARNING_MOJO_PUBLIC_CPP_LEARNING_MOJOM_TRAITS_H_ |