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; }
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 ); }
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; } }
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; }