static void _GetData( char *id, SessionData *session, SessionCtrl *ctrl) { ValueStruct *v,*a; int size; if (session == NULL) { return; } if (ctrl->sysdbvals == NULL) { Warning("ctrl->sysdbvals is null"); return; } a = GetRecordItem(ctrl->sysdbvals,"values"); size = ValueArraySize(a); if (ctrl->size >= size) { if (ctrl->size == size) { Warning("GetDataAll SYSDBVALS_SIZE(%d) over",size); } ctrl->size += 1; return; } v = GetArrayItem(a,ctrl->size); if (v != NULL) { CopyValue(v,session->sysdbval); } ctrl->size += 1; }
static VALUE aryval_aset(VALUE self, VALUE index, VALUE obj) { value_struct_data *data; int i = NUM2INT(index); ValueStruct *val; Data_Get_Struct(self, value_struct_data, data); val = GetArrayItem(data->value, i); if (val == NULL) rb_raise(rb_eIndexError, "index out of range: %d", i); set_value(val, obj); return obj; }
static VALUE aryval_aref(VALUE self, VALUE index) { value_struct_data *data; int i = NUM2INT(index); VALUE obj; ValueStruct *val; Data_Get_Struct(self, value_struct_data, data); if (i >= 0 && i < RARRAY(data->cache)->len && !NIL_P(RARRAY(data->cache)->ptr[i])) return RARRAY(data->cache)->ptr[i]; val = GetArrayItem(data->value, i); if (val == NULL) return Qnil; obj = get_value(val); if (CACHEABLE(val)) rb_ary_store(data->cache, i, obj); return obj; }
int VariantUtilities::ConvertVariantToJsonValue(const IECommandExecutor& executor, VARIANT variant_value, Json::Value* value) { int status_code = WD_SUCCESS; if (VariantIsString(variant_value)) { std::string string_value = ""; if (variant_value.bstrVal) { std::wstring bstr_value = variant_value.bstrVal; string_value = StringUtilities::ToString(bstr_value); } *value = string_value; } else if (VariantIsInteger(variant_value)) { *value = variant_value.lVal; } else if (VariantIsDouble(variant_value)) { *value = variant_value.dblVal; } else if (VariantIsBoolean(variant_value)) { *value = variant_value.boolVal == VARIANT_TRUE; } else if (VariantIsEmpty(variant_value)) { *value = Json::Value::null; } else if (variant_value.vt == VT_NULL) { *value = Json::Value::null; } else if (VariantIsIDispatch(variant_value)) { if (VariantIsArray(variant_value) || VariantIsElementCollection(variant_value)) { Json::Value result_array(Json::arrayValue); long length = 0; status_code = GetArrayLength(variant_value.pdispVal, &length); for (long i = 0; i < length; ++i) { Json::Value array_item_result; int array_item_status = GetArrayItem(executor, variant_value.pdispVal, i, &array_item_result); result_array[i] = array_item_result; } *value = result_array; } else if (VariantIsObject(variant_value)) { Json::Value result_object; std::vector<std::wstring> property_names; status_code = GetPropertyNameList(variant_value.pdispVal, &property_names); for (size_t i = 0; i < property_names.size(); ++i) { CComVariant property_value_variant; GetVariantObjectPropertyValue(variant_value.pdispVal, property_names[i], &property_value_variant); Json::Value property_value; ConvertVariantToJsonValue(executor, property_value_variant, &property_value); std::string name = StringUtilities::ToString(property_names[i]); result_object[name] = property_value; } *value = result_object; } else { LOG(INFO) << "Unknown type of dispatch is found in result, assuming IHTMLElement"; IECommandExecutor& mutable_executor = const_cast<IECommandExecutor&>(executor); CComPtr<IHTMLElement> node; variant_value.pdispVal->QueryInterface<IHTMLElement>(&node); ElementHandle element_wrapper; mutable_executor.AddManagedElement(node, &element_wrapper); *value = element_wrapper->ConvertToJson(); } } else { LOG(WARN) << "Unknown type of result is found"; status_code = EUNKNOWNSCRIPTRESULT; } return status_code; }