Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / mojo / public / cpp / bindings / lib / array_internal.cc
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/array_internal.h"
6
7 namespace mojo {
8 namespace internal {
9
10 ArrayDataTraits<bool>::BitRef::~BitRef() {
11 }
12
13 ArrayDataTraits<bool>::BitRef::BitRef(uint8_t* storage, uint8_t mask)
14     : storage_(storage),
15       mask_(mask) {
16 }
17
18 ArrayDataTraits<bool>::BitRef&
19 ArrayDataTraits<bool>::BitRef::operator=(bool value) {
20   if (value) {
21     *storage_ |= mask_;
22   } else {
23     *storage_ &= ~mask_;
24   }
25   return *this;
26 }
27
28 ArrayDataTraits<bool>::BitRef&
29 ArrayDataTraits<bool>::BitRef::operator=(const BitRef& value) {
30   return (*this) = static_cast<bool>(value);
31 }
32
33 ArrayDataTraits<bool>::BitRef::operator bool() const {
34   return (*storage_ & mask_) != 0;
35 }
36
37 // static
38 void ArraySerializationHelper<Handle, true>::ClearHandles(
39     const ArrayHeader* header,
40     ElementType* elements) {
41   for (uint32_t i = 0; i < header->num_elements; ++i)
42     elements[i].set_value(MOJO_HANDLE_INVALID);
43 }
44
45 // static
46 void ArraySerializationHelper<Handle, true>::CloseHandles(
47     const ArrayHeader* header,
48     ElementType* elements) {
49   for (uint32_t i = 0; i < header->num_elements; ++i) {
50     if (elements[i].is_valid())
51       CloseRaw(elements[i]);
52   }
53 }
54
55 // static
56 void ArraySerializationHelper<Handle, true>::EncodePointersAndHandles(
57     const ArrayHeader* header,
58     ElementType* elements,
59     std::vector<Handle>* handles) {
60   for (uint32_t i = 0; i < header->num_elements; ++i)
61     EncodeHandle(&elements[i], handles);
62 }
63
64 // static
65 bool ArraySerializationHelper<Handle, true>::DecodePointersAndHandles(
66     const ArrayHeader* header,
67     ElementType* elements,
68     Message* message) {
69   for (uint32_t i = 0; i < header->num_elements; ++i) {
70     if (!DecodeHandle(&elements[i], message->mutable_handles()))
71       return false;
72   }
73   return true;
74 }
75
76 }  // namespace internal
77 }  // namespace mojo