void AnimationNode::_validate_property(PropertyInfo &property) const { if (!has_filter() && (property.name == "filter_enabled" || property.name == "filters")) { property.usage = 0; } }
/* * _reader_fill_buffer() - buffers all records with the same coordinate */ static void _reader_fill_buffer(bcf_srs_t *files, bcf_sr_t *reader) { // Return if the buffer is full: the coordinate of the last buffered record differs if ( reader->nbuffer && reader->buffer[reader->nbuffer]->pos != reader->buffer[1]->pos ) return; // No iterator (sequence not present in this file) and not streaming if ( !reader->itr && !files->streaming ) return; // Fill the buffer with records starting at the same position int i, ret = 0; while (1) { if ( reader->nbuffer+1 >= reader->mbuffer ) { // Increase buffer size reader->mbuffer += 8; reader->buffer = (bcf1_t**) realloc(reader->buffer, sizeof(bcf1_t*)*reader->mbuffer); for (i=8; i>0; i--) // initialize { reader->buffer[reader->mbuffer-i] = bcf_init1(); reader->buffer[reader->mbuffer-i]->max_unpack = files->max_unpack; reader->buffer[reader->mbuffer-i]->pos = -1; // for rare cases when VCF starts from 1 } } if ( files->streaming ) { if ( reader->file->format.format==vcf ) { if ( (ret=hts_getline(reader->file, KS_SEP_LINE, &files->tmps)) < 0 ) break; // no more lines int ret = vcf_parse1(&files->tmps, reader->header, reader->buffer[reader->nbuffer+1]); if ( ret<0 ) break; } else if ( reader->file->format.format==bcf ) { if ( (ret=bcf_read1(reader->file, reader->header, reader->buffer[reader->nbuffer+1])) < 0 ) break; // no more lines } else { fprintf(stderr,"[%s:%d %s] fixme: not ready for this\n", __FILE__,__LINE__,__FUNCTION__); exit(1); } } else if ( reader->tbx_idx ) { if ( (ret=tbx_itr_next(reader->file, reader->tbx_idx, reader->itr, &files->tmps)) < 0 ) break; // no more lines vcf_parse1(&files->tmps, reader->header, reader->buffer[reader->nbuffer+1]); } else { if ( (ret=bcf_itr_next(reader->file, reader->itr, reader->buffer[reader->nbuffer+1])) < 0 ) break; // no more lines bcf_subset_format(reader->header,reader->buffer[reader->nbuffer+1]); } // apply filter if ( !reader->nfilter_ids ) bcf_unpack(reader->buffer[reader->nbuffer+1], BCF_UN_STR); else { bcf_unpack(reader->buffer[reader->nbuffer+1], BCF_UN_STR|BCF_UN_FLT); if ( !has_filter(reader, reader->buffer[reader->nbuffer+1]) ) continue; } reader->nbuffer++; if ( reader->buffer[reader->nbuffer]->pos != reader->buffer[1]->pos ) break; // the buffer is full } if ( ret<0 ) { // done for this region tbx_itr_destroy(reader->itr); reader->itr = NULL; } if ( files->collapse && reader->nbuffer>=2 && reader->buffer[1]->pos==reader->buffer[2]->pos ) collapse_buffer(files, reader); }
float AnimationNode::_blend_node(const StringName &p_subpath, const Vector<StringName> &p_connections, AnimationNode *p_new_parent, Ref<AnimationNode> p_node, float p_time, bool p_seek, float p_blend, FilterAction p_filter, bool p_optimize, float *r_max) { ERR_FAIL_COND_V(!p_node.is_valid(), 0); ERR_FAIL_COND_V(!state, 0); int blend_count = blends.size(); if (p_node->blends.size() != blend_count) { p_node->blends.resize(blend_count); } float *blendw = p_node->blends.ptrw(); const float *blendr = blends.ptr(); bool any_valid = false; if (has_filter() && is_filter_enabled() && p_filter != FILTER_IGNORE) { for (int i = 0; i < blend_count; i++) { blendw[i] = 0.0; //all to zero by default } const NodePath *K = NULL; while ((K = filter.next(K))) { if (!state->track_map.has(*K)) { continue; } int idx = state->track_map[*K]; blendw[idx] = 1.0; //filtered goes to one } switch (p_filter) { case FILTER_IGNORE: break; //will not happen anyway case FILTER_PASS: { //values filtered pass, the rest don't for (int i = 0; i < blend_count; i++) { if (blendw[i] == 0) //not filtered, does not pass continue; blendw[i] = blendr[i] * p_blend; if (blendw[i] > CMP_EPSILON) { any_valid = true; } } } break; case FILTER_STOP: { //values filtered don't pass, the rest are blended for (int i = 0; i < blend_count; i++) { if (blendw[i] > 0) //filtered, does not pass continue; blendw[i] = blendr[i] * p_blend; if (blendw[i] > CMP_EPSILON) { any_valid = true; } } } break; case FILTER_BLEND: { //filtered values are blended, the rest are passed without blending for (int i = 0; i < blend_count; i++) { if (blendw[i] == 1.0) { blendw[i] = blendr[i] * p_blend; //filtered, blend } else { blendw[i] = blendr[i]; //not filtered, do not blend } if (blendw[i] > CMP_EPSILON) { any_valid = true; } } } break; } } else { for (int i = 0; i < blend_count; i++) { //regular blend blendw[i] = blendr[i] * p_blend; if (blendw[i] > CMP_EPSILON) { any_valid = true; } } } if (r_max) { *r_max = 0; for (int i = 0; i < blend_count; i++) { *r_max = MAX(*r_max, blendw[i]); } } if (!p_seek && p_optimize && !any_valid) //pointless to go on, all are zero return 0; String new_path; AnimationNode *new_parent; //this is the slowest part of processing, but as strings process in powers of 2, and the paths always exist, it will not result in that many allocations if (p_new_parent) { new_parent = p_new_parent; new_path = String(base_path) + String(p_subpath) + "/"; } else { ERR_FAIL_COND_V(!parent, 0); new_parent = parent; new_path = String(parent->base_path) + String(p_subpath) + "/"; } return p_node->_pre_process(new_path, new_parent, state, p_time, p_seek, p_connections); }
int h5repack_verify(const char *fname, pack_opt_t *options) { hid_t fid; /* file ID */ hid_t dset_id=-1; /* dataset ID */ hid_t dcpl_id=-1; /* dataset creation property list ID */ hid_t space_id=-1; /* space ID */ int ret=1; unsigned int i; int j; trav_table_t *travt=NULL; /* open the file */ if ((fid=H5Fopen(fname,H5F_ACC_RDONLY,H5P_DEFAULT))<0 ) return -1; for ( i=0; i<options->op_tbl->nelems; i++) { char* name=options->op_tbl->objs[i].path; pack_info_t *obj = &options->op_tbl->objs[i]; /*------------------------------------------------------------------------- * open *------------------------------------------------------------------------- */ if ((dset_id=H5Dopen(fid,name))<0) goto error; if ((space_id=H5Dget_space(dset_id))<0) goto error; if ((dcpl_id=H5Dget_create_plist(dset_id))<0) goto error; /*------------------------------------------------------------------------- * filter check *------------------------------------------------------------------------- */ for ( j=0; j<obj->nfilters; j++) { if (has_filter(dcpl_id,obj->filter[j].filtn)==0) ret=0; } /*------------------------------------------------------------------------- * layout check *------------------------------------------------------------------------- */ if ((obj->layout!=-1) && (has_layout(dcpl_id,obj)==0)) ret=0; /*------------------------------------------------------------------------- * close *------------------------------------------------------------------------- */ if (H5Pclose(dcpl_id)<0) goto error; if (H5Sclose(space_id)<0) goto error; if (H5Dclose(dset_id)<0) goto error; } /*------------------------------------------------------------------------- * check for the "all" objects option *------------------------------------------------------------------------- */ if (options->all_filter==1 || options->all_layout==1) { /* init table */ trav_table_init(&travt); /* get the list of objects in the file */ if (h5trav_gettable(fid,travt)<0) goto error; for ( i=0; i<travt->nobjs; i++) { char* name=travt->objs[i].name; switch ( travt->objs[i].type ) { case H5G_DATASET: /*------------------------------------------------------------------------- * open *------------------------------------------------------------------------- */ if ((dset_id=H5Dopen(fid,name))<0) goto error; if ((space_id=H5Dget_space(dset_id))<0) goto error; if ((dcpl_id=H5Dget_create_plist(dset_id))<0) goto error; /*------------------------------------------------------------------------- * filter check *------------------------------------------------------------------------- */ if (options->all_filter==1 ){ if (has_filter(dcpl_id,options->filter_g.filtn)==0) ret=0; } /*------------------------------------------------------------------------- * layout check *------------------------------------------------------------------------- */ if (options->all_layout==1){ pack_info_t pack; init_packobject(&pack); pack.layout=options->layout_g; pack.chunk=options->chunk_g; if (has_layout(dcpl_id,&pack)==0) ret=0; } /*------------------------------------------------------------------------- * close *------------------------------------------------------------------------- */ if (H5Pclose(dcpl_id)<0) goto error; if (H5Sclose(space_id)<0) goto error; if (H5Dclose(dset_id)<0) goto error; break; default: break; } /* switch */ } /* i */ /* free table */ trav_table_free(travt); } /*------------------------------------------------------------------------- * close *------------------------------------------------------------------------- */ if (H5Fclose(fid)<0) return -1; return ret; error: H5E_BEGIN_TRY { H5Pclose(dcpl_id); H5Sclose(space_id); H5Dclose(dset_id); H5Fclose(fid); if (travt) trav_table_free(travt); } H5E_END_TRY; return -1; }