void FMovieScene3DConstraintTrackInstance::Update( float Position, float LastPosition, const TArray<UObject*>& RuntimeObjects, class IMovieScenePlayer& Player, FMovieSceneSequenceInstance& SequenceInstance, EMovieSceneUpdatePass UpdatePass ) { UMovieScene3DConstraintSection* FirstConstraintSection = nullptr; const TArray<UMovieSceneSection*>& ConstraintSections = ConstraintTrack->GetAllSections(); for (int32 ConstraintIndex = 0; ConstraintIndex < ConstraintSections.Num(); ++ConstraintIndex) { UMovieScene3DConstraintSection* ConstraintSection = CastChecked<UMovieScene3DConstraintSection>(ConstraintSections[ConstraintIndex]); if (ConstraintSection->IsTimeWithinSection(Position) && (FirstConstraintSection == nullptr || FirstConstraintSection->GetRowIndex() > ConstraintSection->GetRowIndex())) { TArray<UObject*> ConstraintObjects; FGuid ConstraintId = ConstraintSection->GetConstraintId(); if (ConstraintId.IsValid()) { Player.GetRuntimeObjects( Player.GetRootMovieSceneSequenceInstance(), ConstraintId, ConstraintObjects); for (int32 ConstraintObjectIndex = 0; ConstraintObjectIndex < ConstraintObjects.Num(); ++ConstraintObjectIndex) { AActor* Actor = Cast<AActor>(ConstraintObjects[ConstraintObjectIndex]); if (Actor) { UpdateConstraint(Position, RuntimeObjects, Actor, ConstraintSection); } } } } } }
void Manifold::PreSolverStep(float dt) { for (ContactPoint& contact : m_vContacts) { UpdateConstraint(contact); } }
/* * PruneShardList prunes shards from given list based on the selection criteria, * and returns remaining shards in another list. */ List * PruneShardList(Oid relationId, List *whereClauseList, List *shardIntervalList) { List *remainingShardList = NIL; ListCell *shardIntervalCell = NULL; List *restrictInfoList = NIL; Node *baseConstraint = NULL; Var *partitionColumn = PartitionColumn(relationId); char partitionMethod = PartitionType(relationId); /* build the filter clause list for the partition method */ if (partitionMethod == DISTRIBUTE_BY_HASH) { Node *hashedNode = HashableClauseMutator((Node *) whereClauseList, partitionColumn); List *hashedClauseList = (List *) hashedNode; restrictInfoList = BuildRestrictInfoList(hashedClauseList); } else { restrictInfoList = BuildRestrictInfoList(whereClauseList); } /* override the partition column for hash partitioning */ if (partitionMethod == DISTRIBUTE_BY_HASH) { partitionColumn = MakeInt4Column(); } /* build the base expression for constraint */ baseConstraint = BuildBaseConstraint(partitionColumn); /* walk over shard list and check if shards can be pruned */ foreach(shardIntervalCell, shardIntervalList) { ShardInterval *shardInterval = lfirst(shardIntervalCell); List *constraintList = NIL; bool shardPruned = false; /* set the min/max values in the base constraint */ UpdateConstraint(baseConstraint, shardInterval); constraintList = list_make1(baseConstraint); shardPruned = predicate_refuted_by(constraintList, restrictInfoList); if (shardPruned) { ereport(DEBUG2, (errmsg("predicate pruning for shardId " UINT64_FORMAT, shardInterval->id))); } else { remainingShardList = lappend(remainingShardList, &(shardInterval->id)); } }
/* * PruneShardList prunes shards from given list based on the selection criteria, * and returns remaining shards in another list. */ List * PruneShardList(Oid relationId, List *whereClauseList, List *shardIntervalList) { List *remainingShardList = NIL; ListCell *shardIntervalCell = NULL; List *restrictInfoList = NIL; Node *baseConstraint = NULL; Var *partitionColumn = PartitionColumn(relationId); char partitionMethod = PartitionType(relationId); /* build the filter clause list for the partition method */ switch (partitionMethod) { case APPEND_PARTITION_TYPE: case RANGE_PARTITION_TYPE: { restrictInfoList = BuildRestrictInfoList(whereClauseList); break; } case HASH_PARTITION_TYPE: { Node *hashedNode = HashableClauseMutator((Node *) whereClauseList, partitionColumn); List *hashedClauseList = (List *) hashedNode; restrictInfoList = BuildRestrictInfoList(hashedClauseList); /* override the partition column for hash partitioning */ partitionColumn = MakeInt4Column(); break; } default: { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("unsupported table partition type: %c", partitionMethod))); } } /* build the base expression for constraint */ baseConstraint = BuildBaseConstraint(partitionColumn); /* walk over shard list and check if shards can be pruned */ foreach(shardIntervalCell, shardIntervalList) { ShardInterval *shardInterval = lfirst(shardIntervalCell); List *constraintList = NIL; bool shardPruned = false; /* set the min/max values in the base constraint */ UpdateConstraint(baseConstraint, shardInterval); constraintList = list_make1(baseConstraint); shardPruned = predicate_refuted_by(constraintList, restrictInfoList); if (shardPruned) { ereport(DEBUG2, (errmsg("predicate pruning for shard with ID " INT64_FORMAT, shardInterval->id))); } else { remainingShardList = lappend(remainingShardList, &(shardInterval->id)); } }