blob: fc49f47e0baa6f9043911383516b9743d6714a23 [file] [log] [blame]
// 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_VALUE_H_
#define MEDIA_LEARNING_VALUE_H_
#include <cstdint>
#include <ostream>
#include <string>
#include "media/base/media_export.h"
namespace media {
namespace learning {
// Lightweight, copyable value for features and labels.
// Strings are hashed into ints in an implementation-specific way, so don't
// count on ordering between them. See LearningTask for more info about nominal
// versus numerical values.
//
// For numeric values, ==, !=, > operators behave as one would expect.
//
// For strings, only == and != are guaranteed to be meaningful.
class MEDIA_EXPORT Value {
public:
explicit Value(int x);
explicit Value(const char* x);
explicit Value(const std::string& x);
Value(const Value& other);
bool operator==(const Value& rhs) const;
bool operator!=(const Value& rhs) const;
bool operator<(const Value& rhs) const;
private:
int64_t value_ = 0;
friend MEDIA_EXPORT std::ostream& operator<<(std::ostream& out,
const Value& value);
// Copy and assign are fine.
};
// Just to make it clearer what type of value we mean in context.
using FeatureValue = Value;
using TargetValue = Value;
MEDIA_EXPORT std::ostream& operator<<(std::ostream& out, const Value& value);
} // namespace learning
} // namespace media
#endif // MEDIA_LEARNING_VALUE_H_