/*
- Copyright (C) 2013 Tim Mayberry
+ Copyright (C) 2013 Tim Mayberry
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
#include "pbd/ffs.h"
+#ifndef COMPILER_MSVC
#include <strings.h>
+#endif
namespace PBD {
int
ffs (int x)
{
-#if defined(WIN32) && defined(__GNUC__)
+#if defined (COMPILER_MINGW)
return __builtin_ffs(x);
+#elif defined (COMPILER_MSVC)
+ unsigned long index;
+#ifdef WIN64
+ if (0 != _BitScanForward64(&index, (__int64)x))
+#else
+ if (0 != _BitScanForward(&index, (unsigned long)x))
+#endif
+ index++; // Make the result 1-based
+ else
+ index = 0; // All bits were zero
+
+ return (int)index;
#else
- return ffs(x);
+ return ::ffs(x);
#endif
}