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/types.h" 16#include "mojo/system/system_impl_export.h" 17 18namespace mojo { 19 20namespace embedder { 21class PlatformSharedBufferMapping; 22} 23 24namespace system { 25 26class Core; 27 28// Test-only function (defined/used in embedder/test_embedder.cc). Declared here 29// so it can be friended. 30namespace internal { 31bool ShutdownCheckNoLeaks(Core*); 32} 33 34// This class provides the (global) table of memory mappings (owned by |Core|), 35// which maps mapping base addresses to |PlatformSharedBufferMapping|s. 36// 37// This class is NOT thread-safe; locking is left to |Core|. 38class MOJO_SYSTEM_IMPL_EXPORT MappingTable { 39 public: 40 MappingTable(); 41 ~MappingTable(); 42 43 // Tries to add a mapping. (Takes ownership of the mapping in all cases; on 44 // failure, it will be destroyed.) 45 MojoResult AddMapping( 46 scoped_ptr<embedder::PlatformSharedBufferMapping> mapping); 47 MojoResult RemoveMapping(uintptr_t address); 48 49 private: 50 friend bool internal::ShutdownCheckNoLeaks(Core*); 51 52 typedef base::hash_map<uintptr_t, embedder::PlatformSharedBufferMapping*> 53 AddressToMappingMap; 54 AddressToMappingMap address_to_mapping_map_; 55 56 DISALLOW_COPY_AND_ASSIGN(MappingTable); 57}; 58 59} // namespace system 60} // namespace mojo 61 62#endif // MOJO_SYSTEM_MAPPING_TABLE_H_ 63