// Copyright 2013 The Flutter 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 FLUTTER_IMPELLER_ENTITY_CONTENTS_TEST_CONTENTS_TEST_HELPERS_H_
#define FLUTTER_IMPELLER_ENTITY_CONTENTS_TEST_CONTENTS_TEST_HELPERS_H_

#include "impeller/renderer/command.h"

namespace impeller {

/// @brief Retrieve the [VertInfo] struct data from the provided [command].
template <typename T>
typename T::VertInfo* GetVertInfo(const Command& command) {
  auto resource = std::find_if(command.vertex_bindings.buffers.begin(),
                               command.vertex_bindings.buffers.end(),
                               [](const BufferAndUniformSlot& data) {
                                 return data.slot.ext_res_0 == 0u;
                               });
  if (resource == command.vertex_bindings.buffers.end()) {
    return nullptr;
  }

  auto data = (resource->view.resource.buffer->OnGetContents() +
               resource->view.resource.range.offset);
  return reinterpret_cast<typename T::VertInfo*>(data);
}

/// @brief Retrieve the [FragInfo] struct data from the provided [command].
template <typename T>
typename T::FragInfo* GetFragInfo(const Command& command) {
  auto resource = std::find_if(command.fragment_bindings.buffers.begin(),
                               command.fragment_bindings.buffers.end(),
                               [](const BufferAndUniformSlot& data) {
                                 return data.slot.ext_res_0 == 0u ||
                                        data.slot.binding == 64;
                               });
  if (resource == command.fragment_bindings.buffers.end()) {
    return nullptr;
  }

  auto data = (resource->view.resource.buffer->OnGetContents() +
               resource->view.resource.range.offset);
  return reinterpret_cast<typename T::FragInfo*>(data);
}

}  // namespace impeller

#endif  // FLUTTER_IMPELLER_ENTITY_CONTENTS_TEST_CONTENTS_TEST_HELPERS_H_
