普通文本  |  57行  |  1.65 KB

// Copyright 2013 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/public/cpp/bindings/lib/message_builder.h"

#include <stddef.h>
#include <stdint.h>

#include "mojo/public/cpp/bindings/lib/serialization_util.h"
#include "mojo/public/cpp/bindings/message.h"

namespace mojo {
namespace internal {

template <typename Header>
void Allocate(Buffer* buf, Header** header) {
  *header = static_cast<Header*>(buf->Allocate(sizeof(Header)));
  (*header)->num_bytes = sizeof(Header);
}

MessageBuilder::MessageBuilder(uint32_t name, size_t payload_size) {
  InitializeMessage(sizeof(MessageHeader) + payload_size);

  MessageHeader* header;
  Allocate(message_.buffer(), &header);
  header->version = 0;
  header->name = name;
}

MessageBuilder::~MessageBuilder() {
}

MessageBuilder::MessageBuilder() {}

void MessageBuilder::InitializeMessage(size_t size) {
  message_.Initialize(static_cast<uint32_t>(Align(size)),
                      true /* zero_initialized */);
}

MessageWithRequestIDBuilder::MessageWithRequestIDBuilder(uint32_t name,
                                                         size_t payload_size,
                                                         uint32_t flags,
                                                         uint64_t request_id) {
  InitializeMessage(sizeof(MessageHeaderWithRequestID) + payload_size);

  MessageHeaderWithRequestID* header;
  Allocate(message_.buffer(), &header);
  header->version = 1;
  header->name = name;
  header->flags = flags;
  header->request_id = request_id;
}

}  // namespace internal
}  // namespace mojo