void AUD_IIRFilterReader::setCoefficients(const std::vector<float>& b, const std::vector<float>& a) { setLengths(m_b.size(), m_a.size()); m_a = a; m_b = b; }
void SkeletonBlendedGeometry::changed(ConstFieldMaskArg whichField, UInt32 origin, BitVector details) { Inherited::changed(whichField, origin, details); if((whichField & BaseGeometryFieldMask) && getBaseGeometry() != NULL) { if(getBaseGeometry()->getTypes() != NULL) { setTypes(getBaseGeometry()->getTypes()); } if(getBaseGeometry()->getLengths() != NULL) { setLengths(getBaseGeometry()->getLengths()); } if(getBaseGeometry()->getPositions() != NULL) { GeoPropertyUnrecPtr Pos(getBaseGeometry()->getPositions()->clone()); setPositions(dynamic_pointer_cast<GeoVectorProperty>(Pos)); } if(getBaseGeometry()->getNormals() != NULL) { GeoPropertyUnrecPtr Norm(getBaseGeometry()->getNormals()->clone()); setNormals(dynamic_pointer_cast<GeoVectorProperty>(Norm)); } if(getBaseGeometry()->getColors() != NULL) { setColors(getBaseGeometry()->getColors()); } if(getBaseGeometry()->getSecondaryColors() != NULL) { setSecondaryColors(getBaseGeometry()->getSecondaryColors()); } if(getBaseGeometry()->getTexCoords() != NULL) { setTexCoords(getBaseGeometry()->getTexCoords()); } if(getBaseGeometry()->getTexCoords1() != NULL) { setTexCoords1(getBaseGeometry()->getTexCoords1()); } if(getBaseGeometry()->getTexCoords2() != NULL) { setTexCoords2(getBaseGeometry()->getTexCoords2()); } if(getBaseGeometry()->getTexCoords3() != NULL) { setTexCoords3(getBaseGeometry()->getTexCoords3()); } if(getBaseGeometry()->getTexCoords4() != NULL) { setTexCoords4(getBaseGeometry()->getTexCoords4()); } if(getBaseGeometry()->getTexCoords5() != NULL) { setTexCoords5(getBaseGeometry()->getTexCoords5()); } if(getBaseGeometry()->getTexCoords6() != NULL) { setTexCoords6(getBaseGeometry()->getTexCoords6()); } if(getBaseGeometry()->getTexCoords7() != NULL) { setTexCoords7(getBaseGeometry()->getTexCoords7()); } if(getBaseGeometry()->getIndices() != NULL) { setIndices(getBaseGeometry()->getIndices()); } setMaterial(getBaseGeometry()->getMaterial()); } if( (whichField & InternalJointsFieldMask) || (whichField & InternalWeightIndexesFieldMask) || (whichField & InternalWeightsFieldMask)) { calculatePositions(); } }
void MorphGeometry::changed(ConstFieldMaskArg whichField, UInt32 origin, BitVector details) { Inherited::changed(whichField, origin, details); //Do not respond to changes that have a Sync origin if(origin & ChangedOrigin::Sync) { return; } if(whichField & BaseGeometryFieldMask) { if(getBaseGeometry() != NULL) { if(getBaseGeometry()->getTypes() != NULL) { GeoIntegralPropertyUnrecPtr Prop = dynamic_pointer_cast<GeoIntegralProperty>(getBaseGeometry()->getTypes()->clone()); setTypes(Prop); } if(getBaseGeometry()->getLengths() != NULL) { GeoIntegralPropertyUnrecPtr Prop = dynamic_pointer_cast<GeoIntegralProperty>(getBaseGeometry()->getLengths()->clone()); setLengths(Prop); } if(getBaseGeometry()->getIndices() != NULL) { GeoIntegralPropertyUnrecPtr Prop = dynamic_pointer_cast<GeoIntegralProperty>(getBaseGeometry()->getIndices()->clone()); setIndices(Prop); } for(UInt16 i(0) ; i<Geometry::LastIndex ; ++i) { if(getBaseGeometry()->getProperty(i) != NULL) { GeoVectorPropertyUnrecPtr Prop = dynamic_pointer_cast<GeoVectorProperty>(getBaseGeometry()->getProperty(i)->clone()); setProperty(Prop, i); } else { setProperty(NULL, i); } } setMaterial(getBaseGeometry()->getMaterial()); } else { setTypes(NULL); setLengths(NULL); for(UInt16 i(0) ; i<Geometry::LastIndex ; ++i) { setProperty(NULL, i); } setIndices(NULL); setMaterial(NULL); } } if((whichField & InternalWeightsFieldMask) || (whichField & InternalTargetGeometriesFieldMask) || (whichField & BaseGeometryFieldMask) || (whichField & MorphPropertiesFieldMask)) { updateMorph(); } }
void SkeletonBlendedGeometry::changed(ConstFieldMaskArg whichField, UInt32 origin, BitVector details) { Inherited::changed(whichField, origin, details); //Do not respond to changes that have a Sync origin if(origin & ChangedOrigin::Sync) { return; } if((whichField & BaseGeometryFieldMask) && getBaseGeometry() != NULL) { if(getBaseGeometry()->getTypes() != NULL) { setTypes(getBaseGeometry()->getTypes()); } if(getBaseGeometry()->getLengths() != NULL) { setLengths(getBaseGeometry()->getLengths()); } if(getBaseGeometry()->getPositions() != NULL) { GeoPropertyUnrecPtr Pos(getBaseGeometry()->getPositions()->clone()); setPositions(dynamic_pointer_cast<GeoVectorProperty>(Pos)); } if(getBaseGeometry()->getNormals() != NULL) { GeoPropertyUnrecPtr Norm(getBaseGeometry()->getNormals()->clone()); setNormals(dynamic_pointer_cast<GeoVectorProperty>(Norm)); } if(getBaseGeometry()->getColors() != NULL) { setColors(getBaseGeometry()->getColors()); } if(getBaseGeometry()->getSecondaryColors() != NULL) { setSecondaryColors(getBaseGeometry()->getSecondaryColors()); } if(getBaseGeometry()->getTexCoords() != NULL) { setTexCoords(getBaseGeometry()->getTexCoords()); } if(getBaseGeometry()->getTexCoords1() != NULL) { setTexCoords1(getBaseGeometry()->getTexCoords1()); } if(getBaseGeometry()->getTexCoords2() != NULL) { setTexCoords2(getBaseGeometry()->getTexCoords2()); } if(getBaseGeometry()->getTexCoords3() != NULL) { setTexCoords3(getBaseGeometry()->getTexCoords3()); } if(getBaseGeometry()->getTexCoords4() != NULL) { setTexCoords4(getBaseGeometry()->getTexCoords4()); } if(getBaseGeometry()->getTexCoords5() != NULL) { setTexCoords5(getBaseGeometry()->getTexCoords5()); } if(getBaseGeometry()->getTexCoords6() != NULL) { setTexCoords6(getBaseGeometry()->getTexCoords6()); } if(getBaseGeometry()->getTexCoords7() != NULL) { setTexCoords7(getBaseGeometry()->getTexCoords7()); } if(getBaseGeometry()->getIndices() != NULL) { setIndices(getBaseGeometry()->getIndices()); } setMaterial(getBaseGeometry()->getMaterial()); } if(whichField & InternalJointsFieldMask) { _JointPoseTransforms.resize(getNumJoints()); } if( (whichField & BaseGeometryFieldMask) || (whichField & InternalJointsFieldMask) || (whichField & InternalWeightIndexesFieldMask) || (whichField & InternalWeightsFieldMask) || (whichField & BindTransformationFieldMask)) { if(getNumJoints() > 0) { _JointPoseTransforms.resize(getNumJoints()); calculatePositions(); } } }
bool StringCell::replaceBytes(const CharRange &range, const std::uint8_t *pattern, unsigned int patternBytes, unsigned int count) { assert(!isGlobalConstant()); const unsigned int requiredBytes = patternBytes * count; const unsigned int replacedBytes = range.byteCount(); // If we have exclusive access to our data and we're not resizing the string we can use the fast path if ((dataIsInline() || static_cast<HeapStringCell*>(this)->heapByteArray()->isExclusive()) && (requiredBytes == replacedBytes)) { std::uint8_t *copyDest = const_cast<std::uint8_t*>(range.startPointer); while(count--) { memmove(copyDest, pattern, patternBytes); copyDest += patternBytes; } } else { // Create a new string from pieces of the old string const std::uint64_t newByteLength = byteLength() + requiredBytes - replacedBytes; const auto newCharLength = charLength(); if (newByteLength > maximumByteLength()) { return false; } const ByteLengthType initialBytes = range.startPointer - utf8Data(); const ByteLengthType finalBytes = newByteLength - initialBytes - requiredBytes; const bool wasInline = dataIsInline(); const bool nowInline = newByteLength <= inlineDataSize(); SharedByteArray *oldByteArray = nullptr; SharedByteArray *newByteArray = nullptr; // Does this require a COW due to sharing our byte array? const bool needsCow = (!wasInline && !nowInline) && !static_cast<HeapStringCell*>(this)->heapByteArray()->isExclusive(); // Determine if we exceeded our current capacity or if we're using less than half of our allocated space // This will trigger a reallocation of our heap space const auto currentCapacity = byteCapacity(); const bool needHeapRealloc = (newByteLength > currentCapacity) || ((newByteLength < (currentCapacity / 2)) && !nowInline) || needsCow; std::uint8_t* destString; const std::uint8_t* copySource; if (!wasInline && nowInline) { // We're converting to an inline string destString = static_cast<InlineStringCell*>(this)->inlineData(); copySource = pattern; // Store our old byte array so we can unref it later // The code below will overwrite it with our new inline string oldByteArray = static_cast<HeapStringCell*>(this)->heapByteArray(); // Fill the initial chunk of the string memcpy(destString, utf8Data(), initialBytes); } else if (needHeapRealloc) { size_t byteArraySize = newByteLength; newByteArray = SharedByteArray::createInstance(byteArraySize); destString = newByteArray->data(); copySource = pattern; // Fill the initial chunk of the string memcpy(destString, utf8Data(), initialBytes); if (!wasInline) { // Store our old byte array so we can unref it later oldByteArray = static_cast<HeapStringCell*>(this)->heapByteArray(); } } else { destString = utf8Data(); // The initial chunk is already correct // Are our pattern bytes in the range we're about to overwrite? // We only need to check the end of the pattern because the pattern should only be completely inside our // completely outside our string if (((pattern + patternBytes) > (utf8Data() + initialBytes)) && ((pattern + patternBytes) <= (utf8Data() + byteLength()))) { // Create a temporary copy to work with copySource = new std::uint8_t[patternBytes]; memcpy(const_cast<std::uint8_t*>(copySource), pattern, patternBytes); } else { copySource = pattern; } } // Move the unchanged chunk at the end // We need to do this now because if the pattern bytes are longer than the byte we're replacing then we might // overwrite the beginning of the unchanged chunk memmove(destString + initialBytes + requiredBytes, range.startPointer + replacedBytes, finalBytes); std::uint8_t* copyDest = destString + initialBytes; while(count--) { memcpy(copyDest, copySource, patternBytes); copyDest += patternBytes; } if (copySource != pattern) { delete[] copySource; } // Update ourselves with our new string setLengths(newByteLength, newCharLength); if (newByteArray) { static_cast<HeapStringCell*>(this)->setHeapByteArray(newByteArray); } if (oldByteArray != nullptr) { // We can unref this now oldByteArray->unref(); } } return true; }
void SkeletonBlendedGeometry::changed(ConstFieldMaskArg whichField, UInt32 origin, BitVector details) { Inherited::changed(whichField, origin, details); if((whichField & BaseGeometryFieldMask) && getBaseGeometry() != NULL) { if(getBaseGeometry()->getTypes() != NULL) { setTypes(getBaseGeometry()->getTypes()); } if(getBaseGeometry()->getLengths() != NULL) { setLengths(getBaseGeometry()->getLengths()); } if(getBaseGeometry()->getPositions() != NULL) { GeoPropertyUnrecPtr Pos(getBaseGeometry()->getPositions()->clone()); setPositions(dynamic_pointer_cast<GeoVectorProperty>(Pos)); } if(getBaseGeometry()->getNormals() != NULL) { GeoPropertyUnrecPtr Norm(getBaseGeometry()->getNormals()->clone()); setNormals(dynamic_pointer_cast<GeoVectorProperty>(Norm)); } if(getBaseGeometry()->getColors() != NULL) { setColors(getBaseGeometry()->getColors()); } if(getBaseGeometry()->getSecondaryColors() != NULL) { setSecondaryColors(getBaseGeometry()->getSecondaryColors()); } if(getBaseGeometry()->getTexCoords() != NULL) { setTexCoords(getBaseGeometry()->getTexCoords()); } if(getBaseGeometry()->getTexCoords1() != NULL) { setTexCoords1(getBaseGeometry()->getTexCoords1()); } if(getBaseGeometry()->getTexCoords2() != NULL) { setTexCoords2(getBaseGeometry()->getTexCoords2()); } if(getBaseGeometry()->getTexCoords3() != NULL) { setTexCoords3(getBaseGeometry()->getTexCoords3()); } if(getBaseGeometry()->getTexCoords4() != NULL) { setTexCoords4(getBaseGeometry()->getTexCoords4()); } if(getBaseGeometry()->getTexCoords5() != NULL) { setTexCoords5(getBaseGeometry()->getTexCoords5()); } if(getBaseGeometry()->getTexCoords6() != NULL) { setTexCoords6(getBaseGeometry()->getTexCoords6()); } if(getBaseGeometry()->getTexCoords7() != NULL) { setTexCoords7(getBaseGeometry()->getTexCoords7()); } if(getBaseGeometry()->getIndices() != NULL) { setIndices(getBaseGeometry()->getIndices()); } setMaterial(getBaseGeometry()->getMaterial()); } if((whichField & JointsFieldMask) || (whichField & PositionIndexesFieldMask) || (whichField & BlendAmountsFieldMask)) { calculatePositions(); } if(whichField & SkeletonsFieldMask) { for(std::vector<EventConnection>::iterator Itor(_SkeletonListenerConnections.begin()) ; Itor != _SkeletonListenerConnections.end() ; ++Itor) { Itor->disconnect(); } _SkeletonListenerConnections.clear(); for(UInt32 i(0) ; i<getMFSkeletons()->size() ; ++i) { _SkeletonListenerConnections.push_back(getSkeletons(i)->addSkeletonListener(this)); } } }