mapping_table.h revision e5d81f57cb97b3b6b7fccc9c5610d21eb81db09d
1// Copyright 2014 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_SYSTEM_MAPPING_TABLE_H_ 6#define MOJO_SYSTEM_MAPPING_TABLE_H_ 7 8#include <stdint.h> 9 10#include <vector> 11 12#include "base/containers/hash_tables.h" 13#include "base/macros.h" 14#include "base/memory/scoped_ptr.h" 15#include "mojo/public/c/system/core.h" 16#include "mojo/system/system_impl_export.h" 17 18namespace mojo { 19namespace system { 20 21class CoreImpl; 22class RawSharedBufferMapping; 23 24// Test-only function (defined/used in embedder/test_embedder.cc). Declared here 25// so it can be friended. 26namespace internal { 27bool ShutdownCheckNoLeaks(CoreImpl*); 28} 29 30// This class provides the (global) table of memory mappings (owned by 31// |CoreImpl|), which maps mapping base addresses to 32// |RawSharedBuffer::Mapping|s. 33// 34// This class is NOT thread-safe; locking is left to |CoreImpl|. 35class MOJO_SYSTEM_IMPL_EXPORT MappingTable { 36 public: 37 MappingTable(); 38 ~MappingTable(); 39 40 // Tries to add a mapping. (Takes ownership of the mapping in all cases; on 41 // failure, it will be destroyed.) 42 MojoResult AddMapping(scoped_ptr<RawSharedBufferMapping> mapping); 43 MojoResult RemoveMapping(void* address); 44 45 private: 46 friend bool internal::ShutdownCheckNoLeaks(CoreImpl*); 47 48 typedef base::hash_map<uintptr_t, RawSharedBufferMapping*> 49 AddressToMappingMap; 50 AddressToMappingMap address_to_mapping_map_; 51 52 DISALLOW_COPY_AND_ASSIGN(MappingTable); 53}; 54 55} // namespace system 56} // namespace mojo 57 58#endif // MOJO_SYSTEM_MAPPING_TABLE_H_ 59