SimpleProperties::UnpackStatus SimpleProperties::pack(Writer & it, const void * __src, const SP2StructMapping _map[], Uint32 mapSz, bool ignoreMinMax){ const char * _src = (const char *)__src; for(Uint32 i = 0; i<mapSz; i++){ bool ok = false; const char * src = _src + _map[i].Offset; switch(_map[i].Type){ case SimpleProperties::InvalidValue: ok = true; break; case SimpleProperties::Uint32Value:{ Uint32 val = * ((Uint32*)src); if(!ignoreMinMax){ if(val < _map[i].minValue) return ValueTooLow; if(val > _map[i].maxValue) return ValueTooHigh; } ok = it.add(_map[i].Key, val); } break; case SimpleProperties::BinaryValue:{ const char * src_len = _src + _map[i].Length_Offset; Uint32 len = *((Uint32*)src_len); if(!ignoreMinMax){ if(len > _map[i].maxValue) return ValueTooHigh; } ok = it.add(_map[i].Key, src, len); break; } case SimpleProperties::StringValue: if(!ignoreMinMax){ size_t len = strlen(src); if(len > _map[i].maxValue) return ValueTooHigh; } ok = it.add(_map[i].Key, src); break; } if(!ok) return OutOfMemory; } return Eof; }