QScriptValue ScShiftFloatArrayProperty::add(QScriptContext *ctx, QScriptEngine *) { ScProfileFunction SProperty **thisProperty = getThis(ctx); SProperty **addAProperty = unpackValue(ctx->argument(0)); // returning script node as object SProperty **addBProperty = 0; if(ctx->argumentCount() > 1 ) { addBProperty = unpackValue(ctx->argument(1)); // returning script node as object } if(addAProperty && thisProperty) { SFloatArrayProperty* addThis = (*thisProperty)->castTo<SFloatArrayProperty>(); SFloatArrayProperty* addA = (*addAProperty)->castTo<SFloatArrayProperty>(); SFloatArrayProperty* addB = (*addBProperty)->castTo<SFloatArrayProperty>(); if(addThis && addA) { if(addB) { addThis->add(addA, addB); } else { addThis->add(addA); } } } return QScriptValue(); }
QScriptValue ScShiftPropertyContainer::property(const QScriptValue &object, const QScriptString &name, uint id) { ScProfileFunction SPropertyContainer *prop = (*unpackValue(object))->uncheckedCastTo<SPropertyContainer>(); if (!prop) { xAssertFail(); return 0; } if(id != (uint)-1) { SProperty *c = prop->firstChild(); while(c && id) { --id; c = c->nextSibling(); } if(c) { return ScEmbeddedTypes::packValue(c); } } else { return ScEmbeddedTypes::packValue(prop->findChild(name)); } return QScriptValue(); }
QScriptClass::QueryFlags ScShiftPropertyContainer::queryProperty(const QScriptValue &object, const QScriptString &name, QueryFlags flags, uint *id) { ScProfileFunction SPropertyContainer *prop = (*unpackValue(object))->uncheckedCastTo<SPropertyContainer>(); if (!prop) { xAssertFail(); return 0; } *id = (uint)-1; bool isArrayIndex = false; qint32 pos = name.toArrayIndex(&isArrayIndex); if(isArrayIndex) { *id = pos; return flags; } else { SProperty *child = prop->findChild(name); if(child) { return flags; } } return 0; }
void MetaAttribute::unpackAttribute(const ReadSection &rs, Allocator &allocator, uint32 &numValues, CSSM_DATA *&values) const { uint32 valueOffset; unpackNumberOfValues(rs, numValues, valueOffset); // Rough check for number of values; will be more like 10 or 20 if (numValues > 1024) CssmError::throwMe(CSSMERR_DL_DATABASE_CORRUPT); values = reinterpret_cast<CSSM_DATA *>(allocator.malloc(numValues * sizeof(CSSM_DATA))); for (uint32 i = 0; i < numValues; i++) unpackValue(rs, valueOffset, values[i], allocator); }