File: cyclic.h

package info (click to toggle)
pike8.0 8.0.388-2
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 78,428 kB
  • ctags: 38,901
  • sloc: ansic: 265,343; xml: 184,899; makefile: 3,403; sh: 1,712; cpp: 1,328; lisp: 655; awk: 265; asm: 242; objc: 240; pascal: 157; perl: 34; sed: 34
file content (60 lines) | stat: -rw-r--r-- 1,390 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
/*
|| This file is part of Pike. For copyright information see COPYRIGHT.
|| Pike is distributed under GPL, LGPL and MPL. See the file COPYING
|| for more information.
*/

#ifndef CYCLIC_H
#define CYCLIC_H

#include "pike_error.h"
#include "threads.h"

/* #define CYCLIC_DEBUG */

typedef struct CYCLIC
{
  ONERROR onerr;
  void *th;
  char *id;
  void *a,*b;
  void *ret;
  struct CYCLIC *next;
} CYCLIC;


#ifdef CYCLIC_DEBUG

#define DECLARE_CYCLIC()						\
  static char cyclic_identifier__[] = __FILE__ ":" DEFINETOSTR(__LINE__); \
  CYCLIC cyclic_struct__
#define BEGIN_CYCLIC(A,B) \
   begin_cyclic(&cyclic_struct__, cyclic_identifier__, \
                THREAD_T_TO_PTR(th_self()), (void *)(A), (void *)(B))

#else  /* CYCLIC_DEBUG */

#define DECLARE_CYCLIC()	   \
  static char cyclic_identifier__; \
  CYCLIC cyclic_struct__
#define BEGIN_CYCLIC(A,B) \
   begin_cyclic(&cyclic_struct__, &cyclic_identifier__, \
                THREAD_T_TO_PTR(th_self()), (void *)(A), (void *)(B))

#endif	/* !CYCLIC_DEBUG */

#define SET_CYCLIC_RET(RET) \
   cyclic_struct__.ret=(void *)(RET)

#define END_CYCLIC()  unlink_cyclic(&cyclic_struct__)

/* Prototypes begin here */
PMOD_EXPORT void unlink_cyclic(CYCLIC *c);
PMOD_EXPORT void *begin_cyclic(CYCLIC *c,
			       char *id,
			       void *thread,
			       void *a,
			       void *b);
/* Prototypes end here */

#endif /* CYCLIC_H */