$OpenBSD: patch-lib_Alembic_AbcCoreOgawa_StreamManager_cpp,v 1.2 2021/05/24 20:03:37 sthen Exp $

ffsll not available on OpenBSD

Index: lib/Alembic/AbcCoreOgawa/StreamManager.cpp
--- lib/Alembic/AbcCoreOgawa/StreamManager.cpp.orig
+++ lib/Alembic/AbcCoreOgawa/StreamManager.cpp
@@ -45,6 +45,25 @@ namespace ALEMBIC_VERSION_NS {
 // C++11 std::atomics version
 #if __cplusplus >= 201103L
 #define COMPARE_EXCHANGE( V, COMP, EXCH ) V.compare_exchange_weak( COMP, EXCH, std::memory_order_seq_cst, std::memory_order_seq_cst )
+
+Alembic::Util::int64_t ffsll( Alembic::Util::int64_t iValue )
+{
+    if ( !iValue )
+    {
+        return 0;
+    }
+
+    for ( Alembic::Util::int64_t bit = 0; bit < 64; ++bit )
+    {
+        if ( iValue & ( Alembic::Util::int64_t( 1 ) << bit ) )
+        {
+            return bit + 1;
+        }
+    }
+
+    return 0;
+}
+
 // Windows
 #elif defined( _MSC_VER )
 #define COMPARE_EXCHANGE( V, COMP, EXCH ) (InterlockedCompareExchange64( &V, EXCH, COMP ) == COMP)
