/
ColdCore-3.0a9.02/
ColdCore-3.0a9.02/src/
new object $dmi_data: $root;

var $dmi_data descriptions = #[];
var $root created_on = 860904004;
var $root flags = ['variables, 'methods, 'code, 'core];
var $root inited = 1;
var $root managed = [$dmi_data];
var $root manager = $dmi_data;

public method .add_data_to_method() {
    arg method, identifier, @data;
    var method_data, identifier_data;
    
    method_data = (| descriptions[method] |) || #[];
    if ((data.length()) == 1) {
        method_data = method_data.add(identifier, @data);
    } else if ((data.length()) == 2) {
        identifier_data = (| method_data[identifier] |) || #[];
        identifier_data = identifier_data.add(data[1], data[2]);
        method_data = method_data.add(identifier, identifier_data);
    }
    descriptions = descriptions.add(method, method_data);
};

public method .add_description_to_db() {
    arg method, description;
    
    descriptions ?= #[];
    descriptions = (> descriptions.add(method, description) <);
};

public method .del_data_from_method() {
    arg method, identifier, @data;
    var method_data, identifier_data;
    
    method_data = (| descriptions[method] |) || #[];
    if ((data.length()) == 0) {
        (| (method_data = method_data.del(identifier)) |);
    } else if ((data.length()) == 1) {
        identifier_data = (| method_data[identifier] |) || #[];
        (| (identifier_data = identifier_data.del(data[1])) |);
        method_data = method_data.add(identifier, identifier_data);
    }
    descriptions = descriptions.add(method, method_data);
};

public method .del_description_from_db() {
    arg method;
    
    descriptions = (| descriptions.del(method) |);
};

public method .describe_method() {
    arg method;
    
    return (> descriptions[method] <);
};

root method .init_dmi_data() {
    descriptions = #[];
};

root method .uninit_dmi_data() {
    var i;
    
    descriptions ?= #[];
    for i in (descriptions.keys())
        $interface_registry.del_description(this(), i);
    descriptions = 0;
};