File: asarray.pxi

package info (click to toggle)
paraview 3.14.1-6
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 234,468 kB
  • sloc: cpp: 2,166,013; ansic: 801,575; xml: 58,068; tcl: 49,247; python: 43,091; java: 16,625; fortran: 12,224; sh: 11,722; yacc: 5,688; perl: 3,128; makefile: 2,228; lex: 1,311; lisp: 486; asm: 471; pascal: 228
file content (93 lines) | stat: -rw-r--r-- 3,651 bytes parent folder | download | duplicates (2)
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#---------------------------------------------------------------------

cdef inline object newarray_int(int n, int **p):
     if n < 0: n = 0
     cdef int *array = NULL
     cdef object ob = allocate(n*sizeof(int), <void**>&array)
     p[0] = array
     return ob

cdef inline object newarray_int3(int n, int (**p)[3]):
     if n < 0: n = 0
     cdef int (*array)[3] # = NULL ## XXX
     cdef object ob = allocate(n*sizeof(int[3]), <void**>&array)
     p[0] = array
     return ob

#---------------------------------------------------------------------

cdef inline object asarray_int(object sequence, int **p, Py_ssize_t size):
     cdef int *array = NULL
     cdef Py_ssize_t i = 0, n = len(sequence)
     if size > 0: assert n == size, "expecting %d items, got %d" % (size, n)
     cdef object ob = allocate(n*sizeof(int), <void**>&array)
     for i from 0 <= i < n: array[i] = sequence[i]
     p[0] = array
     return ob

cdef inline object asarray_Aint(object sequence, MPI_Aint **p, Py_ssize_t size):
     cdef MPI_Aint *array = NULL
     cdef Py_ssize_t i = 0, n = len(sequence)
     if size > 0: assert n == size, "expecting %d items, got %d" % (size, n)
     cdef object ob = allocate(n*sizeof(MPI_Aint), <void**>&array)
     for i from 0 <= i < n: array[i] = sequence[i]
     p[0] = array
     return ob

cdef inline object asarray_Datatype(object sequence, MPI_Datatype **p, Py_ssize_t size):
     cdef MPI_Datatype *array = NULL
     cdef Py_ssize_t i = 0, n = len(sequence)
     if size >= 0: assert n == size, "expecting %d items, got %d" % (size, n)
     cdef object ob = allocate(n*sizeof(MPI_Datatype), <void**>&array)
     for i from 0 <= i < n: array[i] = (<Datatype?>sequence[i]).ob_mpi
     p[0] = array
     return ob

cdef inline object asarray_Request(object sequence, MPI_Request **p, Py_ssize_t size):
     cdef MPI_Request *array = NULL
     cdef Py_ssize_t i = 0, n = len(sequence)
     if size >= 0: assert n == size, "expecting %d items, got %d" % (size, n)
     cdef object ob = allocate(n*sizeof(MPI_Request), <void**>&array)
     for i from 0 <= i < n: array[i] = (<Request?>sequence[i]).ob_mpi
     p[0] = array
     return ob

cdef inline int restore_Request(object sequence, MPI_Request **p, Py_ssize_t size) except -1:
     cdef Py_ssize_t i
     cdef MPI_Request *array = p[0]
     for i from 0 <= i < size: (<Request?>sequence[i]).ob_mpi = array[i]
     return 0

cdef inline object asarray_Status(object sequence, MPI_Status **p, Py_ssize_t n):
     if sequence is None: return None
     cdef MPI_Status *array = NULL
     cdef object ob = allocate(n*sizeof(MPI_Status), <void**>&array)
     p[0] = array
     return ob

cdef inline int restore_Status(object sequence, MPI_Status **p, Py_ssize_t n)  except -1:
     if sequence is None: return 0
     cdef Py_ssize_t i = 0, m = n - len(sequence)
     if m > 0:
          if isinstance(sequence, list):
               sequence += [Status() for i from 0 <= i < m]
          else:
               n = n - m
     cdef MPI_Status *array = p[0]
     for i from 0 <= i < n: (<Status?>sequence[i]).ob_mpi = array[i]
     return 0

#---------------------------------------------------------------------

cdef inline object asarray_argv(object sequence, char ***p):
     sequence = list(sequence)
     cdef Py_ssize_t i = 0, n = len(sequence)
     cdef char** array = NULL
     cdef object ob = allocate((n+1)*sizeof(char*), <void**>&array)
     for i from 0 <= i < n:
          sequence[i] = asmpistr(sequence[i], &array[i], NULL)
     array[n] = NULL
     p[0] = array
     return (sequence, ob)

#---------------------------------------------------------------------