1 // Copyright 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "mojo/public/cpp/bindings/lib/message_builder.h" 6 7 #include <stddef.h> 8 #include <stdint.h> 9 10 #include "mojo/public/cpp/bindings/lib/serialization_util.h" 11 #include "mojo/public/cpp/bindings/message.h" 12 13 namespace mojo { 14 namespace internal { 15 16 template <typename Header> 17 void Allocate(Buffer* buf, Header** header) { 18 *header = static_cast<Header*>(buf->Allocate(sizeof(Header))); 19 (*header)->num_bytes = sizeof(Header); 20 } 21 22 MessageBuilder::MessageBuilder(uint32_t name, size_t payload_size) { 23 InitializeMessage(sizeof(MessageHeader) + payload_size); 24 25 MessageHeader* header; 26 Allocate(message_.buffer(), &header); 27 header->version = 0; 28 header->name = name; 29 } 30 31 MessageBuilder::~MessageBuilder() { 32 } 33 34 MessageBuilder::MessageBuilder() {} 35 36 void MessageBuilder::InitializeMessage(size_t size) { 37 message_.Initialize(static_cast<uint32_t>(Align(size)), 38 true /* zero_initialized */); 39 } 40 41 MessageWithRequestIDBuilder::MessageWithRequestIDBuilder(uint32_t name, 42 size_t payload_size, 43 uint32_t flags, 44 uint64_t request_id) { 45 InitializeMessage(sizeof(MessageHeaderWithRequestID) + payload_size); 46 47 MessageHeaderWithRequestID* header; 48 Allocate(message_.buffer(), &header); 49 header->version = 1; 50 header->name = name; 51 header->flags = flags; 52 header->request_id = request_id; 53 } 54 55 } // namespace internal 56 } // namespace mojo 57