Ejemplo n.º 1
0
void HspVarCoreDupPtr( PVal *pval, int flag, void *ptr, int size )
{
	//		指定されたポインタからのクローンになる
	//
	PDAT *buf;
	HspVarProc *p;
	p = &hspvarproc[ flag ];
	buf = (PDAT *)ptr;

	HspVarCoreDispose( pval );
	pval->pt = (char *)buf;
	pval->flag = flag;
	pval->size = size;
	pval->mode = HSPVAR_MODE_CLONE;
	pval->len[0] = 1;

	if ( p->basesize < 0 ) {
		pval->len[1] = 1;
	} else {
		pval->len[1] = size / p->basesize;
	}
	pval->len[2] = 0;
	pval->len[3] = 0;
	pval->len[4] = 0;
	pval->offset = 0;
	pval->arraycnt = 0;
	pval->support = HSPVAR_SUPPORT_STORAGE;
}
Ejemplo n.º 2
0
void HspVarCoreBye( void )
{
	int i;
	for(i=0;i<hspvartype_max;i++) {
		if ( mem_pval[i].mode == HSPVAR_MODE_MALLOC ) {
			HspVarCoreDispose( &mem_pval[i] );
		}
	}
	sbFree( mem_pval );
	sbFree( hspvarproc );
}
Ejemplo n.º 3
0
void Hsp3::Dispose( void )
{
	//		axを破棄
	//
	if ( hspctx.mem_mcs == NULL ) return;
	if ( hspctx.mem_var != NULL ) {
		int i;
		for(i=0;i<maxvar;i++) {
			HspVarCoreDispose( &hspctx.mem_var[i] );
		}
		delete [] hspctx.mem_var;	hspctx.mem_var = NULL;
	}

	hspctx.mem_mcs = NULL;
	if ( axfile != NULL ) {
		mem_bye( axfile );
		axfile = NULL;
	}
}
Ejemplo n.º 4
0
void HspVarCoreDimFlex( PVal *pval, int flag, int len0, int len1, int len2, int len3, int len4 )
{
	//		配列を確保する(可変長配列用)
	//		(len1~len4は、4byte単位なので注意)
	//
	HspVarProc *p;
	p = &hspvarproc[ flag ];
	if ((len1<0)||(len2<0)||(len3<0)||(len4<0)) throw HSPVAR_ERROR_ILLEGALPRM;
	HspVarCoreDispose( pval );
	pval->flag = flag;
	pval->len[0] = len0;
	pval->offset = 0;
	pval->arraycnt = 0;
	pval->support = p->support;
	pval->len[1] = len1;
	pval->len[2] = len2;
	pval->len[3] = len3;
	pval->len[4] = len4;
	p->Alloc( pval, NULL );
	pval->len[0] = 1;
}