void PropertiesBinding::SetList(const ValueList& args, KValueRef result)
	{
		if (args.size() >= 2 && args.at(0)->IsString() && args.at(1)->IsList())
		{
			std::string property = args.at(0)->ToString();
			KListRef list = args.at(1)->ToList();

			std::string value = "";
			for (unsigned int i = 0; i < list->Size(); i++)
			{
				KValueRef arg = list->At(i);
				if (arg->IsString())
				{
					value += list->At(i)->ToString();
					if (i < list->Size() - 1)
					{
						value += ",";
					}
				}
				else
				{
					std::cerr << "skipping object: " << arg->GetType() << std::endl;
				}
			}
			config->setString(property, value);
			if (file_path.size() > 0)
			{
				config->save(file_path);
			}
		}
	}
예제 #2
0
void KObject::SetNS(const char *name, KValueRef value)
{
    std::vector<std::string> tokens;
    FileUtils::Tokenize(std::string(name), tokens, ".");

    KObject *scope = this;
    for (size_t i = 0; i < tokens.size() - 1; i++)
    {
        const char* token = tokens[i].c_str();
        StaticBoundObject *next;
        KValueRef next_val = scope->Get(token);

        if (next_val->IsUndefined())
        {
            next = new StaticBoundObject();
            KObjectRef so = next;
            next_val = Value::NewObject(so);
            scope->Set(token, next_val);
            scope = next;
        }
        else if (!next_val->IsObject()
                 && !next_val->IsMethod()
                 && !next_val->IsList())
        {
            std::cerr << "invalid namespace for " << name << ", token: " << token << " was " << next_val->GetType() << std::endl;
            throw Value::NewString("Invalid namespace on setNS");
        }
        else
        {
            scope = next_val->ToObject().get();
        }
    }

    const char *prop_name = tokens[tokens.size()-1].c_str();
    scope->Set(prop_name, value);

#ifdef DEBUG_BINDING
    std::cout << "BOUND: " << value->GetType() << " to: " << name << std::endl;
#endif
}
예제 #3
0
 void convert (Statement &select, KValueRef arg)
 {
     if (arg->IsString())
     {
         std::string *s = new std::string(arg->ToString()); 
         select , use(*s);
         strings.push_back(s);
     }
     else if (arg->IsInt())
     {
         int *i = new int(arg->ToInt());
         select , use(*i);
         ints.push_back(i);
     }
     else if (arg->IsDouble())
     {
         double *d = new double(arg->ToDouble());
         select , use(*d);
         doubles.push_back(d);
     }
     else if (arg->IsBool())
     {
         bool *b = new bool(arg->ToBool());
         select , use(*b);
         bools.push_back(b);
     }
     else if (arg->IsNull() || arg->IsUndefined())
     {
         // in this case, we bind a null string (dequoted)
         std::string *s = new std::string("null");
         select , use(s);
         strings.push_back(s);
     }
     else
     {
         throw ValueException::FromFormat("Unsupport type for argument: %s",
             arg->GetType().c_str());
     }
 }