public ReplicatorStateChangedCallback(Action <C4ReplicatorStatus, object> callback, object context)
        {
            var nextId = Interlocked.Increment(ref _NextID);

            _id             = nextId;
            _callback       = callback;
            _context        = context;
            _StaticMap[_id] = this;
            NativeCallback  = new C4ReplicatorStateChangedCallback(StateChanged);
            NativeContext   = (void *)nextId;
        }
 public static extern C4Replicator *c4repl_new(C4Database *db, C4Address remoteAddress, C4Slice remoteDatabaseName, C4Database *otherLocalDB, C4ReplicatorMode push, C4ReplicatorMode pull, C4ReplicatorStateChangedCallback onStateChanged, void *callbackContext, C4Error *err);
 public static C4Replicator *c4repl_new(C4Database *db, C4Address remoteAddress, string remoteDatabaseName, C4Database *otherLocalDB, C4ReplicatorMode push, C4ReplicatorMode pull, C4ReplicatorStateChangedCallback onStateChanged, void *callbackContext, C4Error *err)
 {
     using (var remoteDatabaseName_ = new C4String(remoteDatabaseName)) {
         return(NativeRaw.c4repl_new(db, remoteAddress, remoteDatabaseName_.AsC4Slice(), otherLocalDB, push, pull, onStateChanged, callbackContext, err));
     }
 }