void jsvArrayBufferIteratorSetValue(JsvArrayBufferIterator *it, JsVar *value) { if (it->type == ARRAYBUFFERVIEW_UNDEFINED) return; assert(!it->hasAccessedElement); // we just haven't implemented this case yet char data[8]; int i,dataLen = (int)JSV_ARRAYBUFFER_GET_SIZE(it->type); if (JSV_ARRAYBUFFER_IS_FLOAT(it->type)) { jsvArrayBufferIteratorFloatToData(data, (unsigned)dataLen, it->type, jsvGetFloat(value)); } else { jsvArrayBufferIteratorIntToData(data, (unsigned)dataLen, it->type, jsvGetInteger(value)); } if (it->type & ARRAYBUFFERVIEW_BIG_ENDIAN) { for (i=dataLen-1;i>=0;i--) { jsvStringIteratorSetChar(&it->it, data[i]); if (dataLen!=1) jsvStringIteratorNext(&it->it); } } else { for (i=0;i<dataLen;i++) { jsvStringIteratorSetChar(&it->it, data[i]); if (dataLen!=1) jsvStringIteratorNext(&it->it); } } if (dataLen!=1) it->hasAccessedElement = true; }
void jsvArrayBufferIteratorSetByteValue(JsvArrayBufferIterator *it, char c) { if (JSV_ARRAYBUFFER_GET_SIZE(it->type)!=1) { assert(0); return; } jsvStringIteratorSetChar(&it->it, c); }
void jsvArrayBufferIteratorSetValue(JsvArrayBufferIterator *it, JsVar *value) { if (it->type == ARRAYBUFFERVIEW_UNDEFINED) return; assert(!it->hasAccessedElement); // we just haven't implemented this case yet char data[8]; unsigned int i,dataLen = JSV_ARRAYBUFFER_GET_SIZE(it->type); if (JSV_ARRAYBUFFER_IS_FLOAT(it->type)) { JsVarFloat v = jsvGetFloat(value); ; if (dataLen==4) { float f = (float)v; memcpy(data,&f,dataLen); } else if (dataLen==8) { double f = (double)v; memcpy(data,&f,dataLen); } else assert(0); } else { JsVarInt v = jsvGetInteger(value); // we don't care about sign when writing - as it gets truncated if (dataLen==1) { char c = (char)v; memcpy(data,&c,dataLen); } else if (dataLen==2) { short c = (short)v; memcpy(data,&c,dataLen); } else if (dataLen==4) { int c = (int)v; memcpy(data,&c,dataLen); } else if (dataLen==8) { long long c = (long long)v; memcpy(data,&c,dataLen); } else assert(0); } for (i=0;i<dataLen;i++) { jsvStringIteratorSetChar(&it->it, data[i]); if (dataLen!=1) jsvStringIteratorNext(&it->it); } if (dataLen!=1) it->hasAccessedElement = true; }
JsVar *jsvIteratorSetValue(JsvIterator *it, JsVar *value) { switch (it->type) { case JSVI_OBJECT : jsvObjectIteratorSetValue(&it->it.obj, value); break; case JSVI_STRING : jsvStringIteratorSetChar(&it->it.str, (char)(jsvIsString(value) ? value->varData.str[0] : (char)jsvGetInteger(value))); break; case JSVI_ARRAYBUFFER : jsvArrayBufferIteratorSetValueAndRewind(&it->it.buf, value); break; default: assert(0); break; } return value; }
void jsvArrayBufferIteratorSetIntegerValue(JsvArrayBufferIterator *it, JsVarInt v) { if (it->type == ARRAYBUFFERVIEW_UNDEFINED) return; assert(!it->hasAccessedElement); // we just haven't implemented this case yet char data[8]; unsigned int i,dataLen = JSV_ARRAYBUFFER_GET_SIZE(it->type); if (JSV_ARRAYBUFFER_IS_FLOAT(it->type)) { jsvArrayBufferIteratorFloatToData(data, dataLen, it->type, (JsVarFloat)v); } else { jsvArrayBufferIteratorIntToData(data, dataLen, it->type, v); } for (i=0;i<dataLen;i++) { jsvStringIteratorSetChar(&it->it, data[i]); if (dataLen!=1) jsvStringIteratorNext(&it->it); } if (dataLen!=1) it->hasAccessedElement = true; }