OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef MOJO_SYSTEM_MEMORY_H_ | 5 #ifndef MOJO_SYSTEM_MEMORY_H_ |
6 #define MOJO_SYSTEM_MEMORY_H_ | 6 #define MOJO_SYSTEM_MEMORY_H_ |
7 | 7 |
8 #include <stddef.h> | 8 #include <stddef.h> |
9 #include <stdint.h> | 9 #include <stdint.h> |
10 #include <string.h> // For |memcpy()|. | 10 #include <string.h> // For |memcpy()|. |
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
174 // |memcpy(user_pointer, source, count * sizeof(Type))|. | 174 // |memcpy(user_pointer, source, count * sizeof(Type))|. |
175 // | 175 // |
176 // Note: The same comments about the validity of |Put()| (except for the part | 176 // Note: The same comments about the validity of |Put()| (except for the part |
177 // about |void|) apply here. | 177 // about |void|) apply here. |
178 void PutArray(const Type* source, size_t count) { | 178 void PutArray(const Type* source, size_t count) { |
179 internal::CheckUserPointerWithCountHelper< | 179 internal::CheckUserPointerWithCountHelper< |
180 sizeof(NonVoidType), MOJO_ALIGNOF(NonVoidType)>(pointer_, count); | 180 sizeof(NonVoidType), MOJO_ALIGNOF(NonVoidType)>(pointer_, count); |
181 memcpy(pointer_, source, count * sizeof(NonVoidType)); | 181 memcpy(pointer_, source, count * sizeof(NonVoidType)); |
182 } | 182 } |
183 | 183 |
184 // Gets a |UserPointer| at offset |i| (in |Type|s) relative to this. This | 184 // Gets a |UserPointer| at offset |i| (in |Type|s) relative to this. |
185 // method is not valid if |Type| is |void| (TODO(vtl): Maybe I should make it | |
186 // valid, with the offset in bytes?). | |
187 UserPointer At(size_t i) const { | 185 UserPointer At(size_t i) const { |
188 return UserPointer(pointer_ + i); | 186 return UserPointer(static_cast<Type*>( |
| 187 static_cast<NonVoidType*>(pointer_) + i)); |
189 } | 188 } |
190 | 189 |
191 // TODO(vtl): This is temporary. Get rid of this. (We should pass | 190 // TODO(vtl): This is temporary. Get rid of this. (We should pass |
192 // |UserPointer<>|s along appropriately, or access data in a safe way | 191 // |UserPointer<>|s along appropriately, or access data in a safe way |
193 // everywhere.) | 192 // everywhere.) |
194 Type* GetPointerUnsafe() const { | 193 Type* GetPointerUnsafe() const { |
195 return pointer_; | 194 return pointer_; |
196 } | 195 } |
197 | 196 |
198 // These provides safe (read-only/write-only/read-and-write) access to a | 197 // These provides safe (read-only/write-only/read-and-write) access to a |
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
357 // Provides a convenient way to make a |UserPointerValue<Type>|. | 356 // Provides a convenient way to make a |UserPointerValue<Type>|. |
358 template <typename Type> | 357 template <typename Type> |
359 inline UserPointerValue<Type> MakeUserPointerValue(Type* pointer) { | 358 inline UserPointerValue<Type> MakeUserPointerValue(Type* pointer) { |
360 return UserPointerValue<Type>(pointer); | 359 return UserPointerValue<Type>(pointer); |
361 } | 360 } |
362 | 361 |
363 } // namespace system | 362 } // namespace system |
364 } // namespace mojo | 363 } // namespace mojo |
365 | 364 |
366 #endif // MOJO_SYSTEM_MEMORY_H_ | 365 #endif // MOJO_SYSTEM_MEMORY_H_ |
OLD | NEW |