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

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

?? qset.h

?? 關于網格剖分的
?? H
字號:
/*<html><pre>  -<a                             href="qh-c.htm#set"
  >-------------------------------</a><a name="TOP">-</a>

   qset.h
     header file for qset.c that implements set

   see qh-c.htm and qset.c
   
   only uses mem.c, malloc/free

   for error handling, writes message and calls
      qh_errexit (qhmem_ERRqhull, NULL, NULL);
   
   set operations satisfy the following properties:
    - sets have a max size, the actual size (if different) is stored at the end
    - every set is NULL terminated
    - sets may be sorted or unsorted, the caller must distinguish this
   
   copyright (c) 1993-1999, The Geometry Center
*/

#ifndef qhDEFset
#define qhDEFset 1

/*================= -structures- ===============*/

#ifndef DEFsetT
#define DEFsetT 1
typedef struct setT setT;   /* a set is a sorted or unsorted array of pointers */
#endif

/*-<a                                      href="qh-c.htm#set"
>----------------------------------------</a><a name="setT">-</a>
   
setT
  a set or list of pointers with maximum size and actual size.

variations:
  unsorted, unique   -- a list of unique pointers with NULL terminator
  			   user guarantees uniqueness
  sorted	     -- a sorted list of unique pointers with NULL terminator
  			   qset.c guarantees uniqueness
  unsorted           -- a list of pointers terminated with NULL
  indexed  	     -- an array of pointers with NULL elements 

structure for set of n elements:

	--------------
	|  maxsize 
	--------------
	|  e[0] - a pointer, may be NULL for indexed sets
	--------------
	|  e[1]
	
	--------------
	|  ...
	--------------
	|  e[n-1]
	--------------
	|  e[n] = NULL
	--------------
	|  ...
	--------------
	|  e[maxsize] - n+1 or NULL (determines actual size of set)
	--------------

*/

/*-- setelemT -- internal type to allow both pointers and indices
*/
typedef union setelemT setelemT;
union setelemT {
  void    *p;
  int      i;         /* integer used for e[maxSize] */
};

struct setT {
  int maxsize;          /* maximum number of elements (except NULL) */
  setelemT e[1];        /* array of pointers, tail is NULL */
                        /* last slot (unless NULL) is actual size+1 
                           e[maxsize]==NULL or e[e[maxsize]-1]==NULL */
                        /* this may generate a warning since e[] contains
			   maxsize elements */
};

/*=========== -constants- =========================*/

/*-<a                                 href="qh-c.htm#set"
  >-----------------------------------</a><a name="SETelemsize">-</a>
   
  SETelemsize
    size of a set element in bytes
*/
#define SETelemsize sizeof(setelemT) 


/*=========== -macros- =========================*/

/*-<a                                 href="qh-c.htm#set"
  >-----------------------------------</a><a name="FOREACHsetelement_">-</a>
   
   FOREACHsetelement_(type, set, variable)
     define FOREACH iterator

   declare:  
     assumes *variable and **variablep are declared
     no space in "variable)" [DEC Alpha cc compiler]

   each iteration:
     variable is set element
     variablep is one beyond variable.  

   to repeat an element:
     variablep--; / *repeat* /

   at exit:
     variable is NULL at end of loop

   example:  
     #define FOREACHfacet_( facets ) FOREACHsetelement_( facetT, facets, facet )

   notes:
     use FOREACHsetelement_i_() if need index or include NULLs

   WARNING: 
     nested loops can't use the same variable (define another FOREACH)
   
     needs braces if nested inside another FOREACH
     this includes intervening blocks, e.g. FOREACH...{ if () FOREACH...} )
*/
#define FOREACHsetelement_(type, set, variable) \
        if (((variable= NULL), set)) for(\
          variable##p= (type **)&((set)->e[0].p); \
	  (variable= *variable##p++);)

/*-<a                                      href="qh-c.htm#set"
  >----------------------------------------</a><a name="FOREACHsetelement_i_">-</a>

   FOREACHsetelement_i_(type, set, variable)
     define indexed FOREACH iterator

   declare:  
     type *variable, variable_n, variable_i;

   each iteration:
     variable is set element, may be NULL
     variable_i is index, variable_n is qh_setsize()

   to repeat an element:
     variable_i--; variable_n-- repeats for deleted element

   at exit:
     variable==NULL and variable_i==variable_n

   example:
     #define FOREACHfacet_i_( facets ) FOREACHsetelement_i_( facetT, facets, facet )
   
   WARNING: 
     nested loops can't use the same variable (define another FOREACH)
   
     needs braces if nested inside another FOREACH
     this includes intervening blocks, e.g. FOREACH...{ if () FOREACH...} )
*/
#define FOREACHsetelement_i_(type, set, variable) \
        if (((variable= NULL), set)) for (\
          variable##_i= 0, variable= (type *)((set)->e[0].p), \
                   variable##_n= qh_setsize(set);\
          variable##_i < variable##_n;\
          variable= (type *)((set)->e[++variable##_i].p) )

/*-<a                                    href="qh-c.htm#set"
  >--------------------------------------</a><a name="FOREACHsetelementreverse_">-</a>

   FOREACHsetelementreverse_(type, set, variable)- 
     define FOREACH iterator in reverse order

   declare:  
     assumes *variable and **variablep are declared
     also declare 'int variabletemp'

   each iteration:
     variable is set element

   to repeat an element:
     variabletemp++; / *repeat* /

   at exit:
     variable is NULL

   example:
     #define FOREACHvertexreverse_( vertices ) FOREACHsetelementreverse_( vertexT, vertices, vertex )
  
   notes:
     use FOREACHsetelementreverse12_() to reverse first two elements
     WARNING: needs braces if nested inside another FOREACH
*/
#define FOREACHsetelementreverse_(type, set, variable) \
        if (((variable= NULL), set)) for(\
	   variable##temp= qh_setsize(set)-1, variable= qh_setlast(set);\
	   variable; variable= \
	   ((--variable##temp >= 0) ? SETelemt_(set, variable##temp, type) : NULL))

/*-<a                                 href="qh-c.htm#set"
  >-----------------------------------</a><a name="FOREACHsetelementreverse12_">-</a>

   FOREACHsetelementreverse12_(type, set, variable)- 
     define FOREACH iterator with e[1] and e[0] reversed

   declare:  
     assumes *variable and **variablep are declared

   each iteration:
     variable is set element
     variablep is one after variable.  

   to repeat an element:
     variablep--; / *repeat* /

   at exit:
     variable is NULL at end of loop
  
   example
     #define FOREACHvertexreverse12_( vertices ) FOREACHsetelementreverse12_( vertexT, vertices, vertex )

   notes:
     WARNING: needs braces if nested inside another FOREACH
*/
#define FOREACHsetelementreverse12_(type, set, variable) \
        if (((variable= NULL), set)) for(\
          variable##p= (type **)&((set)->e[1].p); \
	  (variable= *variable##p); \
          variable##p == ((type **)&((set)->e[0].p))?variable##p += 2: \
	      (variable##p == ((type **)&((set)->e[1].p))?variable##p--:variable##p++))

/*-<a                                 href="qh-c.htm#set"
  >-----------------------------------</a><a name="FOREACHelem_">-</a>

   FOREACHelem_( set )- 
     iterate elements in a set

   declare:  
     void *elem, *elemp;

   each iteration:
     elem is set element
     elemp is one beyond

   to repeat an element:
     elemp--; / *repeat* /

   at exit:
     elem == NULL at end of loop
  
   example:
     FOREACHelem_(set) {
     
   notes:
     WARNING: needs braces if nested inside another FOREACH
*/
#define FOREACHelem_(set) FOREACHsetelement_(void, set, elem)

/*-<a                                 href="qh-c.htm#set"
  >-----------------------------------</a><a name="FOREACHset_">-</a>

   FOREACHset_( set )- 
     iterate a set of sets

   declare:  
     setT *set, **setp;

   each iteration:
     set is set element
     setp is one beyond

   to repeat an element:
     setp--; / *repeat* /

   at exit:
     set == NULL at end of loop
  
   example
     FOREACHset_(sets) {
     
   notes:
     WARNING: needs braces if nested inside another FOREACH
*/
#define FOREACHset_(sets) FOREACHsetelement_(setT, sets, set)

/*-<a                                       href="qh-c.htm#set"
  >-----------------------------------------</a><a name="SETindex_">-</a>

   SETindex_( set, elem )
     return index of elem in set

   notes:   
     for use with FOREACH iteration

   example:
     i= SETindex_(ridges, ridge)
*/
#define SETindex_(set, elem) ((void **)elem##p - (void **)&(set)->e[1].p)

/*-<a                                     href="qh-c.htm#set"
  >---------------------------------------</a><a name="SETref_">-</a>

   SETref_( elem )
     l.h.s. for modifying the current element in a FOREACH iteration

   example:
     SETref_(ridge)= anotherridge;
*/
#define SETref_(elem) (elem##p[-1])

/*-<a                                     href="qh-c.htm#set"
  >---------------------------------------</a><a name="SETelem_">-</a>

   SETelem_(set, n)
     return the n'th element of set
   
   notes:
      assumes that n is valid [0..size] and that set is defined
      use SETelemt_() for type cast
*/
#define SETelem_(set, n)           ((set)->e[n].p)

/*-<a                                     href="qh-c.htm#set"
  >---------------------------------------</a><a name="SETelemt_">-</a>

   SETelemt_(set, n, type)
     return the n'th element of set as a type
   
   notes:
      assumes that n is valid [0..size] and that set is defined
*/
#define SETelemt_(set, n, type)    ((type*)((set)->e[n].p))

/*-<a                                     href="qh-c.htm#set"
  >---------------------------------------</a><a name="SETelemaddr_">-</a>

   SETelemaddr_(set, n, type)
     return address of the n'th element of a set
   
   notes:
      assumes that n is valid [0..size] and set is defined 
*/
#define SETelemaddr_(set, n, type) ((type **)(&((set)->e[n].p)))

/*-<a                                     href="qh-c.htm#set"
  >---------------------------------------</a><a name="SETfirst_">-</a>

   SETfirst_(set)
     return first element of set
   
*/
#define SETfirst_(set)             ((set)->e[0].p)

/*-<a                                     href="qh-c.htm#set"
  >---------------------------------------</a><a name="SETfirstt_">-</a>

   SETfirstt_(set, type)
     return first element of set as a type
   
*/
#define SETfirstt_(set, type)      ((type*)((set)->e[0].p))

/*-<a                                     href="qh-c.htm#set"
  >---------------------------------------</a><a name="SETsecond_">-</a>

   SETsecond_(set)
     return second element of set
   
*/
#define SETsecond_(set)            ((set)->e[1].p)

/*-<a                                     href="qh-c.htm#set"
  >---------------------------------------</a><a name="SETsecondt_">-</a>

   SETsecondt_(set, type)
     return second element of set as a type
*/
#define SETsecondt_(set, type)     ((type*)((set)->e[1].p))

/*-<a                                     href="qh-c.htm#set"
  >---------------------------------------</a><a name="SETaddr_">-</a>

   SETaddr_(set, type)
       return address of set's elements
*/
#define SETaddr_(set,type)	   ((type **)(&((set)->e[0].p)))

/*-<a                                     href="qh-c.htm#set"
  >---------------------------------------</a><a name="SETreturnsize_">-</a>

   SETreturnsize_(set, size) 
     return size of a set
   
   notes:
      set must be defined
      use qh_setsize(set) unless speed is critical
*/
#define SETreturnsize_(set, size) (((size)= ((set)->e[(set)->maxsize].i))?(--(size)):((size)= (set)->maxsize))

/*-<a                                     href="qh-c.htm#set"
  >---------------------------------------</a><a name="SETempty_">-</a>

   SETempty_(set) 
     return true (1) if set is empty
   
   notes:
      set may be NULL
*/
#define SETempty_(set) 	          (!set || (SETfirst_(set) ? 0:1))

/*======= prototypes in alphabetical order ============*/

void  qh_setaddsorted(setT **setp, void *elem);
void  qh_setaddnth(setT **setp, int nth, void *newelem);
void  qh_setappend(setT **setp, void *elem);
void  qh_setappend_set(setT **setp, setT *setA);
void  qh_setappend2ndlast(setT **setp, void *elem);
void  qh_setcheck(setT *set, char *tname, int id);
void  qh_setcompact(setT *set);
setT *qh_setcopy(setT *set, int extra);
void *qh_setdel(setT *set, void *elem);
void *qh_setdellast(setT *set);
void *qh_setdelnth(setT *set, int nth);
void *qh_setdelnthsorted(setT *set, int nth);
void *qh_setdelsorted(setT *set, void *newelem);
setT *qh_setduplicate( setT *set, int elemsize);
int   qh_setequal(setT *setA, setT *setB);
int   qh_setequal_except (setT *setA, void *skipelemA, setT *setB, void *skipelemB);
int   qh_setequal_skip (setT *setA, int skipA, setT *setB, int skipB);
void  qh_setfree(setT **set);
void  qh_setfree2( setT **setp, int elemsize);
void  qh_setfreelong(setT **set);
int   qh_setin(setT *set, void *setelem);
int   qh_setindex(setT *set, void *setelem);
void  qh_setlarger(setT **setp);
void *qh_setlast(setT *set);
setT *qh_setnew(int size);
setT *qh_setnew_delnthsorted(setT *set, int size, int nth, int prepend);
void  qh_setprint(FILE *fp, char* string, setT *set);
void  qh_setreplace(setT *set, void *oldelem, void *newelem);
int   qh_setsize(setT *set);
setT *qh_settemp(int setsize);
void  qh_settempfree(setT **set);
void  qh_settempfree_all(void);
setT *qh_settemppop(void);
void  qh_settemppush(setT *set);
void  qh_settruncate (setT *set, int size);
int   qh_setunique (setT **set, void *elem);
void  qh_setzero (setT *set, int index, int size);


#endif /* qhDEFset */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日本一道本| 亚洲图片一区二区| 久久精品亚洲精品国产欧美| 欧美一区二区三区在线看| 在线不卡一区二区| 欧美日本一区二区在线观看| 欧美三级视频在线| 欧美午夜片在线观看| 欧美三级电影在线看| 欧美日韩一二区| 69成人精品免费视频| 日韩一二三区不卡| 久久久久88色偷偷免费| 欧美国产日韩在线观看| 中文字幕一区二| 亚洲激情图片qvod| 亚洲电影一区二区三区| 日韩制服丝袜av| 久久99国产精品久久99| 国产真实乱偷精品视频免| 国产91丝袜在线观看| 91在线高清观看| 欧美裸体一区二区三区| 日韩午夜精品视频| 亚洲精品在线电影| 国产精品电影一区二区| 亚洲免费在线观看| 性久久久久久久久久久久| 免费成人在线观看视频| 国产成人综合自拍| 色综合激情五月| 51午夜精品国产| 精品国产91久久久久久久妲己 | 91成人在线观看喷潮| 7777精品伊人久久久大香线蕉完整版 | 欧美久久久影院| 欧美大白屁股肥臀xxxxxx| 久久婷婷久久一区二区三区| 亚洲另类春色校园小说| 日韩av一区二区在线影视| 韩国成人在线视频| 91女厕偷拍女厕偷拍高清| 欧美丰满少妇xxxxx高潮对白 | 久热成人在线视频| 成人中文字幕在线| 欧美日韩一区视频| 国产片一区二区| 亚洲成a人片综合在线| 国产成人丝袜美腿| 欧美在线观看视频一区二区 | 奇米色一区二区三区四区| 国产69精品久久久久777| 日本高清成人免费播放| 欧美大胆人体bbbb| 一区二区三区在线看| 精品一区二区三区免费视频| 99re热视频精品| 日韩精品一区二区三区在线播放 | 成人av资源站| 日韩三级免费观看| 亚洲精品网站在线观看| 久久9热精品视频| 在线观看91视频| 国产欧美在线观看一区| 日韩精品欧美精品| 99久久伊人精品| 精品黑人一区二区三区久久| 樱桃视频在线观看一区| 国产成人免费视频一区| 91麻豆精品91久久久久久清纯| 国产精品初高中害羞小美女文| 精品夜夜嗨av一区二区三区| 欧美日韩一区精品| 亚洲人成7777| 国产成+人+日韩+欧美+亚洲| 欧美电视剧免费全集观看| 午夜久久久影院| 色综合视频在线观看| 国产色91在线| 麻豆91在线播放| 欧美日韩黄色影视| 一区二区三区中文字幕在线观看| 国产精品18久久久久久久久久久久 | 国产精品久久久久一区| 麻豆视频观看网址久久| 欧美久久久一区| 一区二区三区在线免费播放| 91免费版在线| 国产欧美日韩综合| 久久成人精品无人区| 91精品国产一区二区三区香蕉| 亚洲综合av网| 一本色道久久综合狠狠躁的推荐| 中文字幕av一区二区三区高| 国产一区二区在线电影| 精品福利视频一区二区三区| 琪琪久久久久日韩精品| 91精品国产福利| 视频一区中文字幕| 欧美顶级少妇做爰| 天堂久久一区二区三区| 欧美日韩美女一区二区| 五月激情综合网| 这里只有精品视频在线观看| 日韩精品欧美成人高清一区二区| 欧美日韩国产欧美日美国产精品| 一区二区三区在线观看国产| 色琪琪一区二区三区亚洲区| 一区二区三区欧美视频| 91国偷自产一区二区三区观看| 亚洲男同性视频| 欧美日韩亚洲不卡| 日日夜夜免费精品| 日韩欧美国产精品一区| 激情综合网最新| 国产精品日日摸夜夜摸av| www.日韩精品| 亚洲综合色丁香婷婷六月图片| 欧美日韩一区二区在线视频| 日韩精品国产欧美| 欧美mv和日韩mv的网站| 国产精品99久久久久| 中文字幕一区二区三区不卡| 欧美午夜精品免费| 三级成人在线视频| 久久免费视频色| 99久久综合99久久综合网站| 一区二区三区成人| 91精品免费在线观看| 国产一区二区三区免费在线观看| 欧美激情一区二区三区四区| 91香蕉视频污| 日韩电影在线观看电影| 久久免费精品国产久精品久久久久| 波波电影院一区二区三区| 亚洲第一精品在线| 精品三级av在线| 成人高清av在线| 婷婷激情综合网| 国产无遮挡一区二区三区毛片日本| 99精品视频中文字幕| 五月天亚洲精品| 久久精品男人天堂av| 91久久一区二区| 美女看a上一区| 亚洲欧洲日产国码二区| 欧美日产国产精品| 国产91对白在线观看九色| 亚洲国产一区视频| 国产午夜精品久久久久久久| 欧美性猛片aaaaaaa做受| 久久99深爱久久99精品| 亚洲精品视频一区二区| 久久视频一区二区| 欧美四级电影网| 国产不卡在线一区| 热久久国产精品| 国产精品九色蝌蚪自拍| 欧美一区二区三区播放老司机| 成人午夜av影视| 男女男精品视频| 亚洲丝袜另类动漫二区| 亚洲精品一区二区三区福利| 欧美影片第一页| 成人黄色软件下载| 久久精品免费观看| 亚洲一区在线观看免费观看电影高清| 欧美变态口味重另类| 在线观看日韩精品| 国产精品一级二级三级| 日本欧美肥老太交大片| 亚洲美女视频一区| 国产区在线观看成人精品| 欧美大片日本大片免费观看| 欧美日韩在线播放一区| av在线一区二区| 国产一区不卡视频| 日韩高清国产一区在线| 亚洲免费看黄网站| 日本一区二区综合亚洲| 欧美大片一区二区三区| 欧美二区三区的天堂| 欧洲精品在线观看| 成人福利视频网站| 国产精品99久久久| 精品系列免费在线观看| 午夜亚洲福利老司机| 亚洲免费大片在线观看| 国产精品美女一区二区在线观看| 欧美大片免费久久精品三p| 91精品中文字幕一区二区三区| 欧美在线不卡视频| 一本大道久久a久久精二百| av在线一区二区| 99久久婷婷国产精品综合| 国产不卡视频一区| 国产一区二区电影| 国产一区中文字幕| 精品一区二区三区视频在线观看 | 91视频国产观看|