OLD | NEW |
| (Empty) |
1 // Copyright 2014 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/bindings/lib/fixed_buffer.h" | |
6 | |
7 #include <assert.h> | |
8 #include <stdlib.h> | |
9 #include <string.h> | |
10 | |
11 #include <algorithm> | |
12 | |
13 #include "mojo/public/bindings/lib/bindings_serialization.h" | |
14 | |
15 namespace mojo { | |
16 namespace internal { | |
17 | |
18 FixedBuffer::FixedBuffer(size_t size) | |
19 : ptr_(NULL), | |
20 cursor_(0), | |
21 size_(internal::Align(size)) { | |
22 ptr_ = static_cast<char*>(calloc(size_, 1)); | |
23 } | |
24 | |
25 FixedBuffer::~FixedBuffer() { | |
26 free(ptr_); | |
27 } | |
28 | |
29 void* FixedBuffer::Allocate(size_t delta, Destructor dtor) { | |
30 assert(!dtor); | |
31 | |
32 delta = internal::Align(delta); | |
33 | |
34 if (delta == 0 || delta > size_ - cursor_) { | |
35 assert(false); | |
36 return NULL; | |
37 } | |
38 | |
39 char* result = ptr_ + cursor_; | |
40 cursor_ += delta; | |
41 | |
42 return result; | |
43 } | |
44 | |
45 void* FixedBuffer::Leak() { | |
46 char* ptr = ptr_; | |
47 ptr_ = NULL; | |
48 cursor_ = 0; | |
49 size_ = 0; | |
50 return ptr; | |
51 } | |
52 | |
53 } // namespace internal | |
54 } // namespace mojo | |
OLD | NEW |