// Copyright 2015 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.

#include "mojo/edk/system/data_pipe_impl.h"

#include <algorithm>
#include <memory>
#include <utility>

#include "base/logging.h"
#include "mojo/edk/system/configuration.h"
#include "mojo/edk/system/message_in_transit.h"
#include "mojo/edk/system/message_in_transit_queue.h"

namespace mojo {
namespace system {

void DataPipeImpl::ConvertDataToMessages(const char* buffer,
                                         size_t* start_index,
                                         size_t* current_num_bytes,
                                         MessageInTransitQueue* message_queue) {
  // The maximum amount of data to send per message (make it a multiple of the
  // element size.
  size_t max_message_num_bytes = GetConfiguration().max_message_num_bytes;
  max_message_num_bytes -= max_message_num_bytes % element_num_bytes();
  DCHECK_GT(max_message_num_bytes, 0u);

  while (*current_num_bytes > 0) {
    size_t current_contiguous_num_bytes =
        (*start_index + *current_num_bytes > capacity_num_bytes())
            ? (capacity_num_bytes() - *start_index)
            : *current_num_bytes;
    size_t message_num_bytes =
        std::min(max_message_num_bytes, current_contiguous_num_bytes);

    // Note: |message_num_bytes| fits in a |uint32_t| since the capacity does.
    std::unique_ptr<MessageInTransit> message(new MessageInTransit(
        MessageInTransit::Type::ENDPOINT_CLIENT,
        MessageInTransit::Subtype::ENDPOINT_CLIENT_DATA,
        static_cast<uint32_t>(message_num_bytes), buffer + *start_index));
    message_queue->AddMessage(std::move(message));

    DCHECK_LE(message_num_bytes, *current_num_bytes);
    *start_index += message_num_bytes;
    *start_index %= capacity_num_bytes();
    *current_num_bytes -= message_num_bytes;
  }
}

}  // namespace system
}  // namespace mojo
