// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Contains the definition of ValueValidator for the uses in *_cmd_validation.h

#ifndef GPU_COMMAND_BUFFER_SERVICE_VALUE_VALIDATOR_H_
#define GPU_COMMAND_BUFFER_SERVICE_VALUE_VALIDATOR_H_

#include <algorithm>
#include <vector>

#include "base/containers/span.h"

namespace gpu {

// ValueValidator returns true if a value is valid.
template <typename T>
class ValueValidator {
 public:
  ValueValidator() = default;

  ValueValidator(base::span<const T> valid_values) { AddValues(valid_values); }

  void AddValue(const T value) {
    if (!IsValid(value)) {
      valid_values_.push_back(value);
    }
  }

  void AddValues(base::span<const T> valid_values) {
    for (const T& value : valid_values) {
      AddValue(value);
    }
  }

  void RemoveValues(base::span<const T> invalid_values) {
    for (const auto& value : invalid_values) {
      auto iter = std::ranges::find(valid_values_, value);
      if (iter != valid_values_.end()) {
        valid_values_.erase(iter);
        DCHECK(!IsValid(value));
      }
    }
  }

  bool IsValid(const T value) const {
    return std::ranges::contains(valid_values_, value);
  }

  const std::vector<T>& GetValues() const { return valid_values_; }

 private:
  std::vector<T> valid_values_;
};

}  // namespace gpu

#endif  // GPU_COMMAND_BUFFER_SERVICE_VALUE_VALIDATOR_H_
