// Copyright 2016 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef TEST_FUZZER_FUZZER_SUPPORT_H_
#define TEST_FUZZER_FUZZER_SUPPORT_H_

#include "include/v8.h"

namespace v8_fuzzer {

class FuzzerSupport {
 public:
  FuzzerSupport(int* argc, char*** argv);
  ~FuzzerSupport();

  static FuzzerSupport* Get();

  v8::Isolate* GetIsolate();
  v8::Local<v8::Context> GetContext();

 private:
  // Prevent copying. Not implemented.
  FuzzerSupport(const FuzzerSupport&);
  FuzzerSupport& operator=(const FuzzerSupport&);

  class ArrayBufferAllocator;

  v8::Platform* platform_;
  ArrayBufferAllocator* allocator_;
  v8::Isolate* isolate_;
  v8::Global<v8::Context> context_;
};

}  // namespace

#endif  //  TEST_FUZZER_FUZZER_SUPPORT_H_
