// 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 V8_INSPECTOR_ATOMICS_H_
#define V8_INSPECTOR_ATOMICS_H_

#include <stdint.h>

#if defined(_MSC_VER)
#include <windows.h>
#endif

namespace v8_inspector {

#if defined(_MSC_VER)

inline int atomicIncrement(int volatile* addend) {
  return InterlockedIncrement(reinterpret_cast<long volatile*>(addend));
}

#else

inline int atomicAdd(int volatile* addend, int increment) {
  return __sync_add_and_fetch(addend, increment);
}
inline int atomicIncrement(int volatile* addend) {
  return atomicAdd(addend, 1);
}

#endif

}  // namespace v8_inspector

#endif  // V8_INSPECTOR_ATOMICS_H_