📄 zmemory.c
字号:
for ( i = old_m; i < new_m; i++ )
__zzero__(A->me[i],new_n);
#endif
A->max_m = new_max_m;
A->max_n = new_max_n;
A->max_size = A->max_m*A->max_n;
A->m = new_m; A->n = new_n;
return A;
}
/* zv_resize -- returns the (complex) vector x with dim new_dim
-- x is set to the zero vector */
#ifndef ANSI_C
ZVEC *zv_resize(x,new_dim)
ZVEC *x;
int new_dim;
#else
ZVEC *zv_resize(ZVEC *x, int new_dim)
#endif
{
if (new_dim < 0)
error(E_NEG,"zv_resize");
if ( ! x )
return zv_get(new_dim);
if (new_dim == x->dim)
return x;
if ( x->max_dim == 0 ) /* assume that it's from sub_zvec */
return zv_get(new_dim);
if ( new_dim > x->max_dim )
{
if (mem_info_is_on()) {
mem_bytes(TYPE_ZVEC,x->max_dim*sizeof(complex),
new_dim*sizeof(complex));
}
x->ve = RENEW(x->ve,new_dim,complex);
if ( ! x->ve )
error(E_MEM,"zv_resize");
x->max_dim = new_dim;
}
if ( new_dim > x->dim )
__zzero__(&(x->ve[x->dim]),new_dim - x->dim);
x->dim = new_dim;
return x;
}
/* varying arguments */
#ifdef ANSI_C
#include <stdarg.h>
/* To allocate memory to many arguments.
The function should be called:
zv_get_vars(dim,&x,&y,&z,...,NULL);
where
int dim;
ZVEC *x, *y, *z,...;
The last argument should be NULL !
dim is the length of vectors x,y,z,...
returned value is equal to the number of allocated variables
Other gec_... functions are similar.
*/
int zv_get_vars(int dim,...)
{
va_list ap;
int i=0;
ZVEC **par;
va_start(ap, dim);
while (par = va_arg(ap,ZVEC **)) { /* NULL ends the list*/
*par = zv_get(dim);
i++;
}
va_end(ap);
return i;
}
int zm_get_vars(int m,int n,...)
{
va_list ap;
int i=0;
ZMAT **par;
va_start(ap, n);
while (par = va_arg(ap,ZMAT **)) { /* NULL ends the list*/
*par = zm_get(m,n);
i++;
}
va_end(ap);
return i;
}
/* To resize memory for many arguments.
The function should be called:
v_resize_vars(new_dim,&x,&y,&z,...,NULL);
where
int new_dim;
ZVEC *x, *y, *z,...;
The last argument should be NULL !
rdim is the resized length of vectors x,y,z,...
returned value is equal to the number of allocated variables.
If one of x,y,z,.. arguments is NULL then memory is allocated to this
argument.
Other *_resize_list() functions are similar.
*/
int zv_resize_vars(int new_dim,...)
{
va_list ap;
int i=0;
ZVEC **par;
va_start(ap, new_dim);
while (par = va_arg(ap,ZVEC **)) { /* NULL ends the list*/
*par = zv_resize(*par,new_dim);
i++;
}
va_end(ap);
return i;
}
int zm_resize_vars(int m,int n,...)
{
va_list ap;
int i=0;
ZMAT **par;
va_start(ap, n);
while (par = va_arg(ap,ZMAT **)) { /* NULL ends the list*/
*par = zm_resize(*par,m,n);
i++;
}
va_end(ap);
return i;
}
/* To deallocate memory for many arguments.
The function should be called:
v_free_vars(&x,&y,&z,...,NULL);
where
ZVEC *x, *y, *z,...;
The last argument should be NULL !
There must be at least one not NULL argument.
returned value is equal to the number of allocated variables.
Returned value of x,y,z,.. is VNULL.
Other *_free_list() functions are similar.
*/
int zv_free_vars(ZVEC **pv,...)
{
va_list ap;
int i=1;
ZVEC **par;
zv_free(*pv);
*pv = ZVNULL;
va_start(ap, pv);
while (par = va_arg(ap,ZVEC **)) { /* NULL ends the list*/
zv_free(*par);
*par = ZVNULL;
i++;
}
va_end(ap);
return i;
}
int zm_free_vars(ZMAT **va,...)
{
va_list ap;
int i=1;
ZMAT **par;
zm_free(*va);
*va = ZMNULL;
va_start(ap, va);
while (par = va_arg(ap,ZMAT **)) { /* NULL ends the list*/
zm_free(*par);
*par = ZMNULL;
i++;
}
va_end(ap);
return i;
}
#elif VARARGS
#include <varargs.h>
/* To allocate memory to many arguments.
The function should be called:
v_get_vars(dim,&x,&y,&z,...,NULL);
where
int dim;
ZVEC *x, *y, *z,...;
The last argument should be NULL !
dim is the length of vectors x,y,z,...
returned value is equal to the number of allocated variables
Other gec_... functions are similar.
*/
int zv_get_vars(va_alist) va_dcl
{
va_list ap;
int dim,i=0;
ZVEC **par;
va_start(ap);
dim = va_arg(ap,int);
while (par = va_arg(ap,ZVEC **)) { /* NULL ends the list*/
*par = zv_get(dim);
i++;
}
va_end(ap);
return i;
}
int zm_get_vars(va_alist) va_dcl
{
va_list ap;
int i=0, n, m;
ZMAT **par;
va_start(ap);
m = va_arg(ap,int);
n = va_arg(ap,int);
while (par = va_arg(ap,ZMAT **)) { /* NULL ends the list*/
*par = zm_get(m,n);
i++;
}
va_end(ap);
return i;
}
/* To resize memory for many arguments.
The function should be called:
v_resize_vars(new_dim,&x,&y,&z,...,NULL);
where
int new_dim;
ZVEC *x, *y, *z,...;
The last argument should be NULL !
rdim is the resized length of vectors x,y,z,...
returned value is equal to the number of allocated variables.
If one of x,y,z,.. arguments is NULL then memory is allocated to this
argument.
Other *_resize_list() functions are similar.
*/
int zv_resize_vars(va_alist) va_dcl
{
va_list ap;
int i=0, new_dim;
ZVEC **par;
va_start(ap);
new_dim = va_arg(ap,int);
while (par = va_arg(ap,ZVEC **)) { /* NULL ends the list*/
*par = zv_resize(*par,new_dim);
i++;
}
va_end(ap);
return i;
}
int zm_resize_vars(va_alist) va_dcl
{
va_list ap;
int i=0, m, n;
ZMAT **par;
va_start(ap);
m = va_arg(ap,int);
n = va_arg(ap,int);
while (par = va_arg(ap,ZMAT **)) { /* NULL ends the list*/
*par = zm_resize(*par,m,n);
i++;
}
va_end(ap);
return i;
}
/* To deallocate memory for many arguments.
The function should be called:
v_free_vars(&x,&y,&z,...,NULL);
where
ZVEC *x, *y, *z,...;
The last argument should be NULL !
There must be at least one not NULL argument.
returned value is equal to the number of allocated variables.
Returned value of x,y,z,.. is VNULL.
Other *_free_list() functions are similar.
*/
int zv_free_vars(va_alist) va_dcl
{
va_list ap;
int i=0;
ZVEC **par;
va_start(ap);
while (par = va_arg(ap,ZVEC **)) { /* NULL ends the list*/
zv_free(*par);
*par = ZVNULL;
i++;
}
va_end(ap);
return i;
}
int zm_free_vars(va_alist) va_dcl
{
va_list ap;
int i=0;
ZMAT **par;
va_start(ap);
while (par = va_arg(ap,ZMAT **)) { /* NULL ends the list*/
zm_free(*par);
*par = ZMNULL;
i++;
}
va_end(ap);
return i;
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -