30 #ifndef GOOGLE_BREAKPAD_COMMON_MEMORY_H_    31 #define GOOGLE_BREAKPAD_COMMON_MEMORY_H_    43 #define sys_mmap2 mmap    44 #define sys_munmap munmap    45 #define MAP_ANONYMOUS MAP_ANON    60       : page_size_(getpagesize()),
    74     if (current_page_ && page_size_ - page_offset_ >= bytes) {
    75       uint8_t *
const ret = current_page_ + page_offset_;
    76       page_offset_ += bytes;
    77       if (page_offset_ == page_size_) {
    85     const unsigned pages =
    86         (bytes + 
sizeof(PageHeader) + page_size_ - 1) / page_size_;
    87     uint8_t *
const ret = GetNPages(pages);
    92         (page_size_ - (page_size_ * pages - (bytes + 
sizeof(PageHeader)))) %
    94     current_page_ = page_offset_ ? ret + page_size_ * (pages - 1) : NULL;
    96     return ret + 
sizeof(PageHeader);
   102     for (PageHeader* header = last_; header; header = header->next) {
   103       const char* current = 
reinterpret_cast<char*
>(header);
   104       if ((p >= current) && (p < current + header->num_pages * page_size_))
   112   uint8_t *GetNPages(
unsigned num_pages) {
   114     void *a = sys_mmap(NULL, page_size_ * num_pages, PROT_READ | PROT_WRITE,
   115                        MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
   117     void *a = sys_mmap2(NULL, page_size_ * num_pages, PROT_READ | PROT_WRITE,
   118                         MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
   123     struct PageHeader *header = 
reinterpret_cast<PageHeader*
>(a);
   124     header->next = last_;
   125     header->num_pages = num_pages;
   128     return reinterpret_cast<uint8_t*
>(a);
   134     for (PageHeader *cur = last_; cur; cur = next) {
   136       sys_munmap(cur, cur->num_pages * page_size_);
   145   const unsigned page_size_;
   147   uint8_t *current_page_;
   148   unsigned page_offset_;
   152 template <
typename T>
   154   typedef typename std::allocator<T>::pointer 
pointer;
   155   typedef typename std::allocator<T>::size_type 
size_type;
   159       : allocator_(other.allocator_) {}
   161   inline pointer 
allocate(size_type n, 
const void* = 0) {
   162     return static_cast<pointer
>(allocator_.Alloc(
sizeof(T) * n));
   190     std::vector<T, PageStdAllocator<T> >::reserve(size_hint);
   196 inline void* 
operator new(
size_t nbytes,
   198   return allocator.Alloc(nbytes);
   201 #endif  // GOOGLE_BREAKPAD_COMMON_MEMORY_H_ 
void deallocate(pointer, size_type)
 
pointer allocate(size_type n, const void *=0)
 
PageStdAllocator< U > other
 
std::allocator< T >::pointer pointer
 
PageStdAllocator(PageAllocator &allocator)
 
std::allocator< T >::size_type size_type
 
PageStdAllocator(const PageStdAllocator< Other > &other)
 
void * Alloc(unsigned bytes)
 
bool OwnsPointer(const void *p)
 
wasteful_vector(PageAllocator *allocator, unsigned size_hint=16)