| Index: sandbox/linux/seccomp/allocator.h
|
| ===================================================================
|
| --- sandbox/linux/seccomp/allocator.h (revision 0)
|
| +++ sandbox/linux/seccomp/allocator.h (revision 0)
|
| @@ -0,0 +1,88 @@
|
| +// Copyright (c) 2010 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +// Implement a very basic memory allocator that make direct system calls
|
| +// instead of relying on libc.
|
| +// This allocator is not thread-safe.
|
| +
|
| +#ifndef ALLOCATOR_H__
|
| +#define ALLOCATOR_H__
|
| +
|
| +#include <cstddef>
|
| +
|
| +namespace playground {
|
| +
|
| +class SystemAllocatorHelper {
|
| + protected:
|
| + static void *sys_allocate(size_t size);
|
| + static void sys_deallocate(void* p, size_t size);
|
| +};
|
| +
|
| +template <class T>
|
| +class SystemAllocator : SystemAllocatorHelper {
|
| + public:
|
| + typedef T value_type;
|
| + typedef T* pointer;
|
| + typedef const T* const_pointer;
|
| + typedef T& reference;
|
| + typedef const T& const_reference;
|
| + typedef size_t size_type;
|
| + typedef std::ptrdiff_t difference_type;
|
| +
|
| + template <class U>
|
| + struct rebind {
|
| + typedef SystemAllocator<U> other;
|
| + };
|
| +
|
| + pointer address(reference value) const {
|
| + return &value;
|
| + }
|
| +
|
| + const_pointer address(const_reference value) const {
|
| + return &value;
|
| + }
|
| +
|
| + SystemAllocator() throw() { }
|
| + SystemAllocator(const SystemAllocator& src) throw() { }
|
| + template <class U> SystemAllocator(const SystemAllocator<U>& src) throw() { }
|
| + ~SystemAllocator() throw() { }
|
| +
|
| + size_type max_size() const throw() {
|
| + return (1 << 30) / sizeof(T);
|
| + }
|
| +
|
| + pointer allocate(size_type num, const void* = 0) {
|
| + if (num > max_size()) {
|
| + return NULL;
|
| + }
|
| + return (pointer)sys_allocate(num * sizeof(T));
|
| + }
|
| +
|
| + void construct(pointer p, const T& value) {
|
| + new(reinterpret_cast<void *>(p))T(value);
|
| + }
|
| +
|
| + void destroy(pointer p) {
|
| + p->~T();
|
| + }
|
| +
|
| + void deallocate(pointer p, size_type num) {
|
| + sys_deallocate(p, num * sizeof(T));
|
| + }
|
| +};
|
| +
|
| +template <class T1, class T2>
|
| +bool operator== (const SystemAllocator<T1>&, const SystemAllocator<T2>&)
|
| + throw() {
|
| + return true;
|
| +}
|
| +template <class T1, class T2>
|
| +bool operator!= (const SystemAllocator<T1>&, const SystemAllocator<T2>&)
|
| + throw() {
|
| + return false;
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| +#endif // ALLOCATOR_H__
|
|
|
| Property changes on: sandbox/linux/seccomp/allocator.h
|
| ___________________________________________________________________
|
| Added: svn:eol-style
|
| + LF
|
|
|
|
|