1 /*  instance.c  */
2 
3 #include "../ZV.h"
4 
5 /*--------------------------------------------------------------------*/
6 /*
7    -----------------------------------------------
8    return 1 if the entries are owned by the object
9    return 0 otherwise
10 
11    created -- 98jan22, cca
12    -----------------------------------------------
13 */
14 int
ZV_owned(ZV * dv)15 ZV_owned (
16    ZV   *dv
17 ) {
18 if ( dv == NULL ) {
19    fprintf(stderr, "\n fatal error in ZV_owned(%p)"
20            "\n bad input\n", dv) ;
21    exit(-1) ;
22 }
23 return(dv->owned) ; }
24 
25 /*--------------------------------------------------------------------*/
26 /*
27    -----------------------
28    return the vector size
29 
30    created -- 98jan22, cca
31    -----------------------
32 */
33 int
ZV_maxsize(ZV * dv)34 ZV_maxsize (
35    ZV   *dv
36 ) {
37 if ( dv == NULL ) {
38    fprintf(stderr, "\n fatal error in ZV_maxsize(%p)"
39            "\n bad input\n", dv) ;
40    exit(-1) ;
41 }
42 return(dv->maxsize) ; }
43 
44 /*--------------------------------------------------------------------*/
45 /*
46    -----------------------
47    return the vector size
48 
49    created -- 98jan22, cca
50    -----------------------
51 */
52 int
ZV_size(ZV * dv)53 ZV_size (
54    ZV   *dv
55 ) {
56 if ( dv == NULL ) {
57    fprintf(stderr, "\n fatal error in ZV_size(%p)"
58            "\n bad input\n", dv) ;
59    exit(-1) ;
60 }
61 return(dv->size) ; }
62 
63 /*--------------------------------------------------------------------*/
64 /*
65    -------------------------------------------------
66    return the loc'th entry of a vector.
67 
68    created -- 98jan22, cca
69    -------------------------------------------------
70 */
71 void
ZV_entry(ZV * dv,int loc,double * pReal,double * pImag)72 ZV_entry (
73    ZV       *dv,
74    int      loc,
75    double   *pReal,
76    double   *pImag
77 ) {
78 if ( dv == NULL || pReal == NULL || pImag == NULL ) {
79    fprintf(stderr, "\n fatal error in ZV_entry(%p,%d,%p,%p)"
80            "\n bad input\n", dv, loc, pReal, pImag) ;
81    exit(-1) ;
82 }
83 if ( loc < 0 || loc >= dv->size || dv->vec == NULL ) {
84    fprintf(stderr, "\n fatal error in ZV_entry(%p,%d,%p,%p)"
85            "\n bad state: size = %d, vec = %p\n",
86            dv, loc, pReal, pImag, dv->size, dv->vec) ;
87    exit(-1) ;
88 }
89 *pReal = dv->vec[2*loc] ;
90 *pImag = dv->vec[2*loc+1] ;
91 
92 return ; }
93 
94 /*--------------------------------------------------------------------*/
95 /*
96    -------------------------------------------------
97    return pointers to the loc'th entry of a vector.
98 
99    created -- 98jan22, cca
100    -------------------------------------------------
101 */
102 void
ZV_pointersToEntry(ZV * dv,int loc,double ** ppReal,double ** ppImag)103 ZV_pointersToEntry (
104    ZV       *dv,
105    int      loc,
106    double   **ppReal,
107    double   **ppImag
108 ) {
109 if ( dv == NULL || ppReal == NULL || ppImag == NULL ) {
110    fprintf(stderr, "\n fatal error in ZV_pointersToEntry(%p,%d,%p,%p)"
111            "\n bad input\n", dv, loc, ppReal, ppImag) ;
112    exit(-1) ;
113 }
114 if ( loc < 0 || loc >= dv->size || dv->vec == NULL ) {
115    fprintf(stderr, "\n fatal error in ZV_pointersToEntry(%p,%d,%p,%p)"
116            "\n bad state: size = %d, vec = %p\n",
117            dv, loc, ppReal, ppImag, dv->size, dv->vec) ;
118    exit(-1) ;
119 }
120 *ppReal = &dv->vec[2*loc] ;
121 *ppImag = &dv->vec[2*loc+1] ;
122 
123 return ; }
124 
125 /*--------------------------------------------------------------------*/
126 /*
127    ----------------------------------------------
128    return a pointer to the object's entries array
129 
130    created -- 98jan22, cca
131    ----------------------------------------------
132 */
133 double *
ZV_entries(ZV * dv)134 ZV_entries (
135    ZV   *dv
136 ) {
137 if ( dv == NULL ) {
138    fprintf(stderr, "\n fatal error in ZV_entries(%p)"
139            "\n bad input\n", dv) ;
140    exit(-1) ;
141 }
142 return(dv->vec) ; }
143 
144 /*--------------------------------------------------------------------*/
145 /*
146    --------------------------------------------
147    fill *psize with the vector's size
148    and *pentries with the address of the vector
149 
150    created -- 98jan22, cca
151    --------------------------------------------
152 */
153 void
ZV_sizeAndEntries(ZV * dv,int * psize,double ** pentries)154 ZV_sizeAndEntries (
155    ZV       *dv,
156    int      *psize,
157    double   **pentries
158 ) {
159 if ( dv == NULL || psize == NULL || pentries == NULL ) {
160    fprintf(stderr, "\n fatal error in ZV_sizeAndEntries(%p,%p,%p)"
161            "\n bad input\n", dv, psize, pentries) ;
162    exit(-1) ;
163 }
164 *psize    = dv->size ;
165 *pentries = dv->vec  ;
166 
167 return ; }
168 
169 /*--------------------------------------------------------------------*/
170 /*
171    ---------------------------
172    set and entry in the vector
173 
174    created -- 98jan22, cca
175    ---------------------------
176 */
177 void
ZV_setEntry(ZV * dv,int loc,double real,double imag)178 ZV_setEntry (
179    ZV       *dv,
180    int      loc,
181    double   real,
182    double   imag
183 ) {
184 /*
185    ---------------
186    check the input
187    ---------------
188 */
189 if ( dv == NULL || loc < 0 ) {
190    fprintf(stderr, "\n fatal error in ZV_setEntry(%p,%d,%f,%f)"
191            "\n bad input\n", dv, loc, real, imag) ;
192    exit(-1) ;
193 }
194 if ( loc >= dv->maxsize ) {
195    int newmaxsize = (int) 1.25*dv->maxsize ;
196    if ( newmaxsize < 10 ) {
197       newmaxsize = 10 ;
198    }
199    if ( loc >= newmaxsize ) {
200       newmaxsize = loc + 1 ;
201    }
202    ZV_setMaxsize(dv, newmaxsize) ;
203 }
204 if ( loc >= dv->size ) {
205    dv->size = loc + 1 ;
206 }
207 dv->vec[2*loc]   = real ;
208 dv->vec[2*loc+1] = imag ;
209 
210 return ; }
211 
212 /*--------------------------------------------------------------------*/
213