亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? loserv.h

?? 一個OPC服務器開發的源代碼。結構清晰
?? H
字號:
/**************************************************************************
 *                                                                        *
 * Light OPC Server development library                                   *
 *                                                                        *
 *   Copyright (c) 2000  Timofei Bondarenko                               *
 **************************************************************************/

#ifndef LOSERV_H
#define LOSERV_H

#ifndef __opcda_h__
# ifndef OPC_QUALITY_MASK
#  include <opcda.h>
# endif
#endif

#ifndef LIGHTOPC_H
#include "lightopc.h"
#endif
#ifndef OPTIONS_H
#include "options.h"
#endif
#ifndef LOSYNCH_H
#include "losynch.h"
#endif

/**************************************************************************
 Internal declarations of loService related structures & components
 **************************************************************************/

#ifdef __cplusplus
extern "C"
	{
#endif


struct loProperty; /* see at proplist.h */
#if !defined (__GNUC__) && 0
typedef struct loProperty loProperty;
#endif


/* lo?F_??? matrix:
 0x0003 - EmptyEnums
 0x000c - NOFORCE/DWG
 0x0020 - NOCACHE - not used
 0x0010 - not used
 0x00c0 - IGNCASE/ACCPATH
 0x0f00 - NOCONV/NOCOMP/EMPTY/CONVERT
 0x7000 - CHECKITEM/CANONAME/NOBROWSE
 0x8000 - ZERORANGE
0x70000 - ThreadingModel
0x80000 - SUBSCRIBE_RAW
 */

#define loTt_VISIBLE (loTF_NOBROWSE) /* inversion of NOBROWSE */
#define loTt_DETAILS (0x80000000) /* VERY internal for destroyng loTagDetail */
#define loTt_ZERORANGE   (0x8000) /* or 0, se below */

#ifndef LO_RANGECENT_DETAIL
#define LO_RANGECENT_DETAIL loTt_ZERORANGE /*(0)*/
/* !=0 - save some memory - put the rangecent to details
     0 - more effective usage of CPU's cache */
#endif

typedef struct loTagDetail
    {
     VARIANT       tdValue;  /* Canonical VARTYPE & default valid value */
     VARIANT       tdEUinfo;
#if 0 != LO_RANGECENT_DETAIL
     double        tdRangecent; /* (range_max - range_min) / 100 */
#endif
     OPCEUTYPE     tdEUtype;
     loWchar       tdName[1];
    } loTagDetail;

typedef struct loTagAttrib
    {
#if 0 == LO_RANGECENT_DETAIL
     double        taRangecent; /* (range_max - range_min) / 100 */
#else
#define            taRangecent taDetail->tdRangecent
#endif
     loTagId       taTi;
     loRealTag     taRt;
     loTagDetail  *taDetail;
     loWchar      *taName;
     int           taName_addlevel;
     unsigned      taFlags;   /* loTF_* */
#if 1
     unsigned      taRights;  /* OPC_READABLE|OPC_WRITEABLE */
#define loOPC_RIGHTS (~0)
#else
#define taRights   taFlags;
#define loOPC_RIGHTS (OPC_READABLE | OPC_WRITEABLE)
#endif
     unsigned      taPropList[loPROPLIST_MAX];
    } loTagAttrib;

#define taValue  taDetail->tdValue
#define taVtype  taDetail->tdValue.vt
#define taVTYPE(ta) V_VT(&((ta)->taValue))
#define taEUinfo taDetail->tdEUinfo
#define taEUtype taDetail->tdEUtype

typedef struct loTagEntry
    {
     VARIANT     primValue;
     loTagAttrib attr;
     loTagState  prim;
     loTrid      primChanged;
     unsigned    active;
    } loTagEntry;

#define loTE_USED(te)  ((te)->attr.taTi /*!=0*/)
#define loIS_VALID(ptr) ((ptr) && (ptr) == (ptr)->iam)

typedef unsigned short lo_hash;
/*               short is better on *long* (> 64k) lists; */
#define loSTRHASH(se,str) ((lo_hash)(se)->wstrhash(str))

struct loService
    {
     loDriver driver;
     unsigned long initphase;
     loCaller cactx;

     unsigned cform_dataonly,
              cform_datatime,
              cform_writecompl;

     loClient *servlist;
     int       shutdown; /* indicates the shutdown condition */
     unsigned  serv_key; /* generator for server's IDs */
     lw_mutex  lkList; /* servlist & shutdown */
     lw_rwlock lkMgmt; /* adding & searching in tags[] */
                      /* using of allocated tags is unlocked */
                      /* changing of lastused - through lkSec */
     lw_rwlock lkPrim; /* access to tags::primXXX */
     lw_mutex  lkDr;   /* serialise ldSubscribe()
                                   ldWriteTags(), ldReadTags() */
     loThrControl update_pipe;
     lw_condb  lkTridWait;
                      /* lock secondary, and lasused & other counts,
                        .state = 1 when secondary updated */
     int (*wstrcmp)(const loWchar *, const loWchar *);
     int (*wstrncmp)(const loWchar *, const loWchar *, unsigned);
     int (*wstrhash)(const loWchar *);
#if 0
     int (*wstrnhash)(const loWchar *, unsigned);
#endif

     loWchar  branch_sep;
     unsigned tag_count; /* valid ti is: 0 < ti < tag_count */
     unsigned firstfree; /* free ti is >= firstfree */
     unsigned lastused;  /* valid ti is <= lastused */
     unsigned lastnamed; /* valid named ti is <= lastnamed */
     loTagEntry   *tags;
     loTagValue   *secondary;
     lo_hash      *name_hash;
     loTrid sec_trid, prim_trid;
#if LO_EV_TIMESTAMP
     FILETIME *ts_prim, *ts_sec;
     unsigned  ts_size;
#endif
/*     loTrid prim_changed;*/

     struct
     loProperty **proplist;
     unsigned     proplist_count;

     void *log;

     loService *iam;
    };

#define loSERVICE_OK(se) (loIS_VALID(se)&&!(se)->shutdown)
int loInternalServiceDestroy(loService *se);

#if 0
#define loLOCK_DRIVER(se)   lw_mutex_lock(&(se)->lkDr)
#define loUNLOCK_DRIVER(se) lw_mutex_unlock(&(se)->lkDr)
#else
#define loLOCK_DRIVER(se)
#define loUNLOCK_DRIVER(se)
#endif

#define loTRIDmin    ((loTrid)4)
#define loIsTRID(x) ((loTrid)(x)>=loTRIDmin)

#if 4 <= loDR_CACHED || 4 <= loDR_STORED
#error Check the loTRIDmin logic!
#endif

loMilliSec loReviseUpdateRate(loService *se, loMilliSec req);

void lo_check_ev_timestamp(unsigned count, FILETIME *timestamp, 
                           const FILETIME *master);

typedef struct loVCTA
  {
   LCID           vc_lcid;
   unsigned short vc_tfl; /* flags */
  } loVCTA; /* Additional arguments for VariantChangeTypeEx() */

typedef struct loCallerx
  {
   loCaller cactx;
   loVCTA   cta;
  } loCallerx;

HRESULT lo_checktype(loCallerx *cactx, loTagAttrib *attr, VARTYPE type/*, LCID lcid*/);

typedef enum loCONV /* conversion from cache/canonical to client requested */
  {
   loCONV_CHANGE,  /* do VariantChangeType() */
   loCONV_COPY,    /* do VariantCopy() */
   loCONV_ASSIGN,  /* VARIANT = VARIANT */
   loCONV_CONVERT  /* call driver for ldConvertTags() */
  } loCONV;

loCONV lo_check_conversion(loTagAttrib *attr, VARTYPE requested);

loTagId loFindItemID(loService *se, loCaller *cactx,
                     int locked,
                     const loWchar *itemid,
		             const loWchar *accpath,
                     int vartype,
                     int ai_goal,   /* loDAIG_XXX */
                     void   **acpath,        /* result */
 		             HRESULT *ecode);        /* result */

void loChangeActivity(loCaller *ca, int act, unsigned count, loTagId *til);

HRESULT lo_conv_enum(loCallerx *cctx, VARIANT *dst, loTagAttrib *ta, void *acpath);

void loTagValue_clear(loTagValue *, unsigned nn);
void loTagDetail_free(loTagDetail *td);
void loTagAttrib_clear(loTagAttrib *, unsigned nn);
void loTagEntry_clear(loTagEntry *, unsigned nn);
void loVariant_clear(VARIANT *, unsigned nn);

void loTagValue_init(loTagValue *, unsigned nn);
void loTagDetail_init(loTagDetail *td);
void loTagAttrib_init(loTagAttrib *, unsigned nn);
void loTagEntry_init(loTagEntry *, unsigned nn);
void loVariant_init(VARIANT *, unsigned nn);

typedef struct loStringBuf
  {
   loWchar *sb_str;
   unsigned sb_size;
  } loStringBuf;

void loStringBuf_init(loStringBuf *sb);
#define loStringBuf_init(pp);   (memset(pp,0,sizeof(loStringBuf)))
void loStringBuf_clear(loStringBuf *sb);
unsigned loStringBuf_realloc(loStringBuf *sb, unsigned size);
#if 0
#define  loStringBuf_REALLOC(sb,size) ((sb)->sb_size < (size)? \
         loStringBuf_realloc(sb,size) :(sb)->sb_size))
#else
#define  loStringBuf_REALLOC(sb,size) ((sb)->sb_size >= (size) || \
         loStringBuf_realloc(sb,size) )
#endif
/* returns 0 on fail */

#if LO_INIT_VARIANT == 0
#define loTagValue_init(pp,nn)   (memset(pp,0,(nn)*sizeof(loTagValue)))
#define loTagDetail_init(pp)     (memset(pp,0,   offsetof(loTagDetail,tdName)))
#define loTagAttrib_init(pp,nn)  (memset(pp,0,(nn)*sizeof(loTagAttrib)))
#define loTagEntry_init(pp,nn)   (memset(pp,0,(nn)*sizeof(loTagEntry)))
#define loVariant_init(pp,nn)    (memset(pp,0,(nn)*sizeof(VARIANT)))
#define VARIANTINIT(x) (V_VT(x)=VT_EMPTY)
#else
#define VARIANTINIT(x) (VariantInit(x))
#endif
#define loTagPair_init(pp,nn)   (memset(pp,0,(nn)*sizeof(loTagPair)))

lw_thrrettype loUpdatePipe(void *vse);

DWORD lo_adjust_bandwidth(DWORD bandwitdh, loMilliSec bandw_time, loMilliSec curtime);

/**************************************************************************/

void lo_setup_clock(void);

extern loMilliSec    lo_timegran_ms;
extern unsigned long lo_timegran_100ns;

loMilliSec lo_default_timegran(loMilliSec *minwait);

void ld_current_time(const loCaller *, FILETIME *);


#if     LO_USE_PTHREADS
extern unsigned long  (*lo_millisecabs)(struct timespec *);
struct timespec *lo_absrel(struct timespec *, unsigned);
# define lo_millisec()            (lo_millisecabs(0))
# define lo_MILLISEC(ms)          ((ms) = lo_millisec())
# define lo_MILLISECABS(ms,abst)  ((ms) = lo_millisecabs(&(abst)))
# define loDCL_ABSTIME(abst)       struct timespec abst
# define loABSREL(abst,rel)       (lo_absrel(&(abst),(rel)))
#else /*LO_USE_PTHREADS*/
# if      LO_USE_HRCLOCK
extern DWORD (WINAPI *lo_millisec_clock)(void);
#   define lo_millisec()          (lo_millisec_clock())
#   define lo_MILLISEC(ms)        ((ms) = lo_millisec())
# else  /*LO_USE_HRCLOCK*/
#   define lo_millisec()          (GetTickCount())
#   define lo_MILLISEC(ms)        ((ms) = lo_millisec())
# endif /*LO_USE_HRCLOCK*/
# define lo_MILLISECABS(ms,abst)  (lo_MILLISEC(ms))
# define loDCL_ABSTIME(abst)       
# define loABSREL(abst,rel)       (rel)
#endif /*LO_USE_PTHREADS*/

#if  LO_TIMEBACK
# if LO_USE_PTHREADS
extern int lo_NO_TIMEBACK;
# else 
#  define  lo_NO_TIMEBACK (0)
# endif
#else
# define  lo_NO_TIMEBACK (0)
#endif

#ifdef __cplusplus
	}
#endif
#endif /*LOSERV_H*/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品一线二线三线| 色94色欧美sute亚洲线路一ni | 轻轻草成人在线| 中文字幕在线视频一区| 日韩欧美电影一二三| 欧美女孩性生活视频| 色综合久久中文字幕综合网| 不卡的av在线| 风间由美一区二区av101 | 欧美精品一区二区三区高清aⅴ| 欧美高清视频不卡网| 在线看不卡av| 欧美日韩亚洲综合在线| 欧美日韩色综合| 在线观看亚洲精品视频| 欧美日韩高清不卡| 这里只有精品免费| 欧美一级视频精品观看| www久久精品| 国产清纯美女被跳蛋高潮一区二区久久w| 亚洲精品一区二区三区蜜桃下载 | 久久久久久9999| 国产欧美在线观看一区| 亚洲欧美影音先锋| 一区二区三区精品视频在线| 亚洲h在线观看| 美国十次综合导航| bt7086福利一区国产| 在线一区二区视频| 欧美一级黄色片| 国产欧美一二三区| 亚洲精品第1页| 麻豆高清免费国产一区| 国产a区久久久| 欧美日本一区二区在线观看| www日韩大片| 亚洲青青青在线视频| 爽好多水快深点欧美视频| 狠狠色伊人亚洲综合成人| 成人综合婷婷国产精品久久蜜臀 | 婷婷中文字幕一区三区| 免费xxxx性欧美18vr| 国产成人av一区二区三区在线观看| 99久久久无码国产精品| 538prom精品视频线放| 国产精品久久久久aaaa| 青青草成人在线观看| 成人av资源在线观看| 3751色影院一区二区三区| 亚洲国产精品成人综合| 日韩av不卡在线观看| 国产999精品久久久久久绿帽| 欧美私模裸体表演在线观看| 久久精品欧美日韩精品| 日韩综合小视频| 成人网在线免费视频| 日韩精品一区二区三区在线观看 | 精品国产不卡一区二区三区| 亚洲人成网站影音先锋播放| 国产麻豆91精品| 日韩欧美亚洲国产另类 | 欧美三级在线播放| 中文幕一区二区三区久久蜜桃| 日本成人在线不卡视频| 97se亚洲国产综合在线| 久久久久久久久久久久久女国产乱| 亚洲成人免费视| 在线观看av一区| 中文字幕五月欧美| 成人毛片视频在线观看| 国产日韩欧美激情| 国产精品538一区二区在线| 欧美成va人片在线观看| 日韩国产欧美三级| 欧美精品色综合| 亚洲午夜精品网| 欧美三区在线观看| 天使萌一区二区三区免费观看| 一本大道久久a久久综合| 国产精品久久一卡二卡| 成人精品国产一区二区4080| 中文字幕不卡的av| 成人高清伦理免费影院在线观看| 国产校园另类小说区| 国产成人av电影在线播放| 国产婷婷色一区二区三区| 韩国在线一区二区| 中文字幕免费一区| 丁香网亚洲国际| 自拍偷拍亚洲欧美日韩| 色狠狠一区二区三区香蕉| 伊人夜夜躁av伊人久久| 欧美日韩在线播放三区四区| 午夜在线成人av| 欧美成人在线直播| 国产成人综合网站| 亚洲图片激情小说| 欧美日韩在线一区二区| 日本v片在线高清不卡在线观看| 欧美一卡二卡三卡| 成人免费看片app下载| 亚洲免费观看在线视频| 在线播放中文一区| 韩国精品免费视频| 亚洲欧美激情在线| 91精品国产一区二区三区香蕉 | 国产精品一区二区男女羞羞无遮挡| 久久综合精品国产一区二区三区 | 奇米精品一区二区三区四区| 欧美精品一区二区三| 成人精品在线视频观看| 亚洲综合一二区| 26uuu久久综合| 在线这里只有精品| 久久精品久久99精品久久| 国产亚洲一二三区| 91黄色激情网站| 久久69国产一区二区蜜臀| 中文字幕亚洲电影| 精品国产乱码久久久久久蜜臀| 成人av在线资源网| 日本成人在线网站| 亚洲免费观看在线视频| 精品粉嫩aⅴ一区二区三区四区| 99国产精品一区| 国产一区二区三区免费播放| 一区二区三区久久| 中文字幕精品三区| 日韩欧美国产wwwww| 91久久国产综合久久| 国产乱淫av一区二区三区| 亚洲一区二区三区四区五区黄 | 欧美肥胖老妇做爰| 99久久久免费精品国产一区二区 | 欧美国产一区二区在线观看| 欧美精品精品一区| 色综合久久综合网欧美综合网| 99riav一区二区三区| 国内成人精品2018免费看| 一区二区三区四区视频精品免费| 久久精品一区四区| 日韩精品一区二区三区视频| 在线视频国内一区二区| 972aa.com艺术欧美| 成人免费视频免费观看| 国产裸体歌舞团一区二区| 久久精品国产精品亚洲精品| 亚洲国产精品久久久久婷婷884| 国产欧美日本一区视频| 久久影音资源网| 欧美tickling挠脚心丨vk| 欧美丝袜自拍制服另类| 欧美亚一区二区| 欧美亚洲自拍偷拍| 色88888久久久久久影院按摩| 成人av在线一区二区| 国产suv精品一区二区6| 成人v精品蜜桃久久一区| 成人一级视频在线观看| 成人动漫av在线| 99精品桃花视频在线观看| jlzzjlzz欧美大全| 91丨国产丨九色丨pron| 91在线你懂得| 91在线观看成人| 日本高清视频一区二区| 在线亚洲一区观看| 欧美四级电影网| 91精品国产综合久久精品麻豆| 91精品国产麻豆| 精品国产乱码久久久久久影片| 精品日韩成人av| 国产亚洲一区二区三区| 亚洲日本欧美天堂| 亚洲国产日韩在线一区模特| 香蕉久久夜色精品国产使用方法| 五月天久久比比资源色| 久久99久久精品| 成人一区二区视频| 色播五月激情综合网| 欧美一级xxx| 国产欧美一区二区精品婷婷| 一区二区国产盗摄色噜噜| 视频一区二区三区在线| 久久爱www久久做| 成人av在线一区二区三区| 日本丰满少妇一区二区三区| 91精品国产欧美一区二区18| 欧美成人免费网站| 综合激情网...| 日韩1区2区日韩1区2区| 国产成人免费在线观看不卡| 色婷婷久久久亚洲一区二区三区| 欧美一区三区二区| 国产精品嫩草久久久久| 丝袜美腿成人在线| 白白色亚洲国产精品| 欧美一区二区视频观看视频| 国产精品久久久久久久浪潮网站| 亚洲第一搞黄网站|