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_PUBLIC_CPP_ENVIRONMENT_ENVIRONMENT_H_
6#define MOJO_PUBLIC_CPP_ENVIRONMENT_ENVIRONMENT_H_
7
8#include "mojo/public/cpp/system/macros.h"
9
10struct MojoAsyncWaiter;
11struct MojoLogger;
12
13namespace mojo {
14
15// Other parts of the Mojo C++ APIs use the *static* methods of this class.
16//
17// The "standalone" implementation of this class requires that this class (in
18// the lib/ subdirectory) be instantiated (and remain so) while using the Mojo
19// C++ APIs. I.e., the static methods depend on things set up by the constructor
20// and torn down by the destructor.
21//
22// Other implementations may not have this requirement.
23class Environment {
24 public:
25  Environment();
26  // This constructor allows the standard implementations to be overridden (set
27  // a parameter to null to get the standard implementation).
28  Environment(const MojoAsyncWaiter* default_async_waiter,
29              const MojoLogger* default_logger);
30  ~Environment();
31
32  static const MojoAsyncWaiter* GetDefaultAsyncWaiter();
33  static const MojoLogger* GetDefaultLogger();
34
35 private:
36  MOJO_DISALLOW_COPY_AND_ASSIGN(Environment);
37};
38
39}  // namespace mojo
40
41#endif  // MOJO_PUBLIC_CPP_ENVIRONMENT_ENVIRONMENT_H_
42