Loader::Loader()
{
    char line[256];
    char tag[256];

    /* Special case for GLES emulation */
    if (checkGlesEmulationStatus() == 0) {
        LOGD("Emulator without GPU support detected. Fallback to software renderer.");
        gConfig.add( entry_t(0, 0, "android") );
        return;
    }

    /* Otherwise, use egl.cfg */
    FILE* cfg = fopen("/system/lib/egl/egl.cfg", "r");
    if (cfg == NULL) {
        // default config
        LOGD("egl.cfg not found, using default config");
        gConfig.add( entry_t(0, 0, "android") );
    } else {
        while (fgets(line, 256, cfg)) {
            int dpy;
            int impl;
            if (sscanf(line, "%u %u %s", &dpy, &impl, tag) == 3) {
                //LOGD(">>> %u %u %s", dpy, impl, tag);
                gConfig.add( entry_t(dpy, impl, tag) );
            }
        }
        fclose(cfg);
    }
}
	void VariableHolder::SetLocal(Type<name_t>::const_ref _name, Type<elem_t>::const_ref _elem) 
		{	DATA->names.insert(entry_t(_name, _elem));	}
	void VariableHolder::AppendArgument(Type<name_t>::const_ref _name, Type<elem_t>::const_ref _elem) {
		ins_pair_t ins_r = DATA->args.insert(entry_t(_name, _elem));
		SINASSERT(ins_r.second /* node inserted == true */);
		DATA->args_ordered.push_back(Entry(ins_r.first->first, ins_r.first->second));
	}