blob: 3149a2fdcd6f462e274032674e2306340e1e668a [file] [log] [blame]
// Copyright 2015 The Vanadium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// +build darwin ios
package context
import (
"unsafe"
"v.io/v23/context"
iutil "v.io/x/ios/util"
)
//#import "types.h"
import "C"
// Not currently used
//export ios_io_v_v23_context_VContext_nativeDeadline
func ios_io_v_v23_context_VContext_nativeDeadline(ctxHandle C.GoContextHandle) C.double {
ctx := GoContext(uint64(ctxHandle))
d, ok := ctx.Deadline()
if !ok {
return 0
}
return C.double(iutil.NSTimeInterval(d))
}
//export ios_io_v_v23_context_VContext_nativeWithCancel
func ios_io_v_v23_context_VContext_nativeWithCancel(ctxHandle C.GoContextHandle, errOut C.SwiftVErrorPtr) C.GoCancelableContextHandle {
ctx := GoContext(uint64(ctxHandle))
ctx, cancelFunc := context.WithCancel(ctx)
swiftCtx, err := SwiftCancelableContext(ctx, cancelFunc)
if err != nil {
iutil.ThrowSwiftError(ctx, err, unsafe.Pointer(errOut))
return C.GoCancelableContextHandle(0)
}
return C.GoCancelableContextHandle(swiftCtx)
}
//export ios_io_v_v23_context_VContext_nativeWithDeadline
func ios_io_v_v23_context_VContext_nativeWithDeadline(ctxHandle C.GoContextHandle, deadlineEpoch C.double, errOut C.SwiftVErrorPtr) C.GoCancelableContextHandle {
ctx := GoContext(uint64(ctxHandle))
deadline := iutil.GoTime(float64(deadlineEpoch))
ctx, cancelFunc := context.WithDeadline(ctx, deadline)
swiftCtx, err := SwiftCancelableContext(ctx, cancelFunc)
if err != nil {
iutil.ThrowSwiftError(ctx, err, unsafe.Pointer(errOut))
return C.GoCancelableContextHandle(0)
}
return C.GoCancelableContextHandle(swiftCtx)
}
//export ios_io_v_v23_context_VContext_nativeWithTimeout
func ios_io_v_v23_context_VContext_nativeWithTimeout(ctxHandle C.GoContextHandle, nsTimeout C.double, errOut *C.SwiftVError) C.GoCancelableContextHandle {
ctx := GoContext(uint64(ctxHandle))
timeout := iutil.GoDuration(float64(nsTimeout))
ctx, cancelFunc := context.WithTimeout(ctx, timeout)
swiftCtx, err := SwiftCancelableContext(ctx, cancelFunc)
if err != nil {
iutil.ThrowSwiftError(ctx, err, unsafe.Pointer(errOut))
return C.GoCancelableContextHandle(0)
}
return C.GoCancelableContextHandle(swiftCtx)
}
//export ios_io_v_v23_context_VContext_nativeFinalize
func ios_io_v_v23_context_VContext_nativeFinalize(ctxHandle C.GoContextHandle) {
iutil.GoUnref(uint64(ctxHandle))
}
//export ios_io_v_v23_context_CancelableVContext_nativeCancelAsync
func ios_io_v_v23_context_CancelableVContext_nativeCancelAsync(ctxHandle C.GoCancelableContextHandle, asyncId C.AsyncCallbackIdentifier, successCallback C.SwiftAsyncSuccessCallback) {
ctx, cancelFunc := GoCancelableContext(uint64(ctxHandle))
go func() {
cancelFunc()
<-ctx.Done()
iutil.DoSuccessCallback(unsafe.Pointer(successCallback), int32(asyncId))
}()
}