Home | History | Annotate | Download | only in system
      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 
     18 namespace mojo {
     19 
     20 namespace embedder {
     21 class PlatformSharedBufferMapping;
     22 }
     23 
     24 namespace system {
     25 
     26 class Core;
     27 
     28 // Test-only function (defined/used in embedder/test_embedder.cc). Declared here
     29 // so it can be friended.
     30 namespace internal {
     31 bool 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|.
     38 class 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