gitee.com/haifengat/gotap_dipper@v0.0.4-0.20231212021028-041a6fa876e5/generate/quote_lnx.go.tpl (about)

     1  package quote
     2  
     3  /*
     4  #cgo CPPFLAGS: -fPIC -I./
     5  #cgo linux LDFLAGS: -fPIC -L${SRCDIR} -Wl,-rpath ${SRCDIR} -ltapquote -lstdc++
     6  
     7  #include "struct_cgo.h"
     8  
     9  void* CreateQuoteAPINotify();
    10  void* CreateQuoteAPI(struct TapAPIApplicationInfo *appInfo);
    11  void FreeQuoteAPI(void* api);
    12  void* GetQuoteAPIVersion();
    13  int SetQuoteAPIDataPath(char* path);
    14  int SetQuoteAPILogLevel(char level);
    15  
    16  // ********************** 调用函数 ******************
    17  [[ range .Fn ]]int q[[ .FuncName ]](void* api[[ range .Params ]],[[ CHeaderBaseType .Type .Name]] [[ .Name ]][[end]]);
    18  [[ end ]]
    19  
    20  
    21  // ********************** 响应函数 ******************
    22  [[ range .On ]]void qSet[[ .FuncName ]](void*, void*);
    23  [[ end ]]
    24  
    25  // Onxxx 为go 的 export所用
    26  [[ range .On ]]void [[ .FuncName ]]([[ range $i,$v := .Params ]][[ if gt $i 0 ]], [[ end ]] [[ CHeaderBaseType .Type .Name ]] [[ .Name ]][[end]]);
    27  [[ end ]]
    28  
    29  #include <stdlib.h>
    30  #include <stdint.h>
    31  */
    32  import "C"
    33  
    34  import (
    35  	"fmt"
    36  	"unsafe"
    37  )
    38  
    39  var q *Quote
    40  func NewQuote()*Quote{
    41  	if q==nil {
    42  		q = &Quote{}
    43  	}
    44  	return q
    45  }
    46  
    47  // Quote 行情接口
    48  type Quote struct {
    49  	api, spi unsafe.Pointer
    50  	// 定义响应函数变量
    51  	[[ range .On ]][[ .FuncName ]] func([[ range $i,$v := .Params ]][[ if gt $i 0 ]], [[ end ]] [[ DefineVar .Type .Name ]][[end]])
    52  	[[ end ]]
    53  }
    54  
    55  func (q *Quote) CreateTapQuoteAPINotify() {
    56  	q.spi = C.CreateQuoteAPINotify()
    57  }
    58  func (q *Quote) CreateTapQuoteAPI(appInfo *TapAPIApplicationInfo) {
    59  	q.api = C.CreateQuoteAPI((*C.struct_TapAPIApplicationInfo)(unsafe.Pointer(appInfo)))
    60  }
    61  func (q *Quote)FreeTapQuoteAPI(api unsafe.Pointer)  {
    62  	C.FreeQuoteAPI(api)
    63  }
    64  func (q *Quote)GetTapQuoteAPIVersion() string {
    65  	return C.GoString((*C.char)(C.GetQuoteAPIVersion()))
    66  }
    67  func (q *Quote) SetTapQuoteAPIDataPath(path string) C.int {
    68  	return C.SetQuoteAPIDataPath(C.CString(path))
    69  }
    70  func (q *Quote) SetTapQuoteAPILogLevel(level byte) C.int {
    71  	return C.SetQuoteAPILogLevel(C.char(level))
    72  }
    73  
    74  // 替代 SetAPINotify
    75  func (q *Quote) SetSpi() { C.qSetAPINotify(q.api, q.spi) }
    76  
    77  // ********************** 调用函数 ******************
    78  [[ range .Fn ]]
    79  func (q *Quote) [[ .FuncName ]]([[ range $i,$v := .Params ]][[ if gt $i 0 ]], [[ end ]][[ C2Go .Type .Name]][[ end ]]) C.int {return C.q[[ .FuncName ]](q.api[[ range .Params ]], [[ Go2C .Type .Name ]][[ end ]])}
    80  [[ end ]]
    81  
    82  // ********************** 响应函数 ******************
    83  func (q *Quote)RegCallBack(){
    84  	[[ range .On ]]C.qSet[[ .FuncName ]](q.spi, C.[[ .FuncName ]])
    85  	[[ end ]]
    86  }
    87  
    88  [[ range .On ]]
    89  //export [[ .FuncName ]]
    90  func [[ .FuncName ]]([[ range $i,$v := .Params ]][[ if gt $i 0 ]], [[ end ]] [[ CCB .Type .Name ]][[end]]){
    91  	if q.[[ .FuncName ]] != nil {
    92  		q.[[ .FuncName ]]([[ range $i,$v := .Params ]][[ if gt $i 0 ]], [[ end ]] [[ cgo .Type .Name ]][[end]])
    93  	} else {
    94  		fmt.Println("[[ .FuncName ]]")
    95  	}
    96  }
    97  [[ end ]]