Example #1
0
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;
}
Example #2
0
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;
}
Example #3
0
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;
}