github.com/gotranspile/cxgo@v0.3.8-0.20240118201721-29871598a6a2/runtime/pthread/pthread.go (about)

     1  package pthread
     2  
     3  import (
     4  	"sync"
     5  	"unsafe"
     6  
     7  	"github.com/gotranspile/cxgo/runtime/libc"
     8  )
     9  
    10  const MUTEX_RECURSIVE = 1
    11  
    12  type Attr struct {
    13  	_ int
    14  }
    15  
    16  func Create(th **Thread, attr *Attr, start func(unsafe.Pointer) unsafe.Pointer, arg unsafe.Pointer) int32 {
    17  	panic("TODO")
    18  }
    19  
    20  type Thread struct {
    21  	_ int
    22  }
    23  
    24  func (th *Thread) Join(ret unsafe.Pointer) int32 {
    25  	panic("TODO")
    26  }
    27  
    28  func (th *Thread) TimedJoinNP(ret unsafe.Pointer, abs *libc.TimeSpec) int32 {
    29  	panic("TODO")
    30  }
    31  
    32  type MutexAttr struct {
    33  	typ int32
    34  }
    35  
    36  func (m *MutexAttr) Init() int32 {
    37  	m.typ = 0
    38  	return 0
    39  }
    40  
    41  func (m *MutexAttr) SetType(typ int32) int32 {
    42  	m.typ = typ
    43  	return 0
    44  }
    45  
    46  func (m *MutexAttr) Destroy() int32 {
    47  	m.typ = 0
    48  	return 0
    49  }
    50  
    51  type Mutex struct {
    52  	*sync.Mutex
    53  }
    54  
    55  func (m *Mutex) Init(attr *MutexAttr) int32 {
    56  	if attr.typ == MUTEX_RECURSIVE {
    57  		// FIXME
    58  	}
    59  	m.Mutex = new(sync.Mutex)
    60  	return 0
    61  }
    62  
    63  func (m *Mutex) Destroy() int32 {
    64  	m.Mutex = nil
    65  	return 0
    66  }
    67  
    68  func (m *Mutex) CLock() int32 {
    69  	m.Mutex.Lock()
    70  	return 0
    71  }
    72  
    73  func (m *Mutex) TryLock() int32 {
    74  	panic("TODO")
    75  }
    76  
    77  func (m *Mutex) TimedLock(t *libc.TimeSpec) int32 {
    78  	panic("TODO")
    79  }
    80  
    81  func (m *Mutex) CUnlock() int32 {
    82  	m.Mutex.Unlock()
    83  	return 0
    84  }
    85  
    86  type CondAttr struct {
    87  	// FIXME
    88  }
    89  
    90  func CondInit(c *sync.Cond, attr *CondAttr) int32 {
    91  	if attr != nil {
    92  		panic("TODO")
    93  	}
    94  	*c = *sync.NewCond(nil)
    95  	return 0
    96  }
    97  
    98  func CondFree(c *sync.Cond) int32 {
    99  	return 0
   100  }