Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(459)

Side by Side Diff: mojo/public/bindings/lib/bindings_serialization.h

Issue 220243007: Mojo: Move mojo/public/bindings/lib to mojo/public/cpp/bindings/lib. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
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 #ifndef MOJO_PUBLIC_BINDINGS_LIB_BINDINGS_SERIALIZATION_H_
6 #define MOJO_PUBLIC_BINDINGS_LIB_BINDINGS_SERIALIZATION_H_
7
8 #include <vector>
9
10 #include "mojo/public/cpp/bindings/buffer.h"
11 #include "mojo/public/cpp/bindings/message.h"
12
13 namespace mojo {
14 namespace internal {
15
16 size_t Align(size_t size);
17
18 // Pointers are encoded as relative offsets. The offsets are relative to the
19 // address of where the offset value is stored, such that the pointer may be
20 // recovered with the expression:
21 //
22 // ptr = reinterpret_cast<char*>(offset) + *offset
23 //
24 // A null pointer is encoded as an offset value of 0.
25 //
26 void EncodePointer(const void* ptr, uint64_t* offset);
27 const void* DecodePointerRaw(const uint64_t* offset);
28
29 template <typename T>
30 inline void DecodePointer(const uint64_t* offset, T** ptr) {
31 *ptr = reinterpret_cast<T*>(const_cast<void*>(DecodePointerRaw(offset)));
32 }
33
34 // Check that the given pointer references memory contained within the message.
35 bool ValidatePointer(const void* ptr, const Message& message);
36
37 // Handles are encoded as indices into a vector of handles. These functions
38 // manipulate the value of |handle|, mapping it to and from an index.
39 void EncodeHandle(Handle* handle, std::vector<Handle>* handles);
40 bool DecodeHandle(Handle* handle, std::vector<Handle>* handles);
41
42 // The following 2 functions are used to encode/decode all objects (structs and
43 // arrays) in a consistent manner.
44
45 template <typename T>
46 inline void Encode(T* obj, std::vector<Handle>* handles) {
47 if (obj->ptr)
48 obj->ptr->EncodePointersAndHandles(handles);
49 EncodePointer(obj->ptr, &obj->offset);
50 }
51
52 template <typename T>
53 inline bool Decode(T* obj, Message* message) {
54 DecodePointer(&obj->offset, &obj->ptr);
55 if (obj->ptr) {
56 if (!ValidatePointer(obj->ptr, *message))
57 return false;
58 if (!obj->ptr->DecodePointersAndHandles(message))
59 return false;
60 }
61 return true;
62 }
63
64 } // namespace internal
65 } // namespace mojo
66
67 #endif // MOJO_PUBLIC_BINDINGS_LIB_BINDINGS_SERIALIZATION_H_
OLDNEW
« no previous file with comments | « mojo/public/bindings/lib/bindings_internal.h ('k') | mojo/public/bindings/lib/bindings_serialization.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698