Skip to content

Commit

Permalink
improve resolveNodeId perf
Browse files Browse the repository at this point in the history
  • Loading branch information
erossignon committed Sep 2, 2014
1 parent 9cd1161 commit 4c6e94e
Showing 1 changed file with 34 additions and 50 deletions.
84 changes: 34 additions & 50 deletions lib/datamodel/nodeid.js
Original file line number Diff line number Diff line change
Expand Up @@ -272,81 +272,65 @@ var variableTypes = require("./../opcua_node_ids").VariableTypeIds;
var methods = require("./../opcua_node_ids").MethodIds;
var referenceTypeIds = require("./../opcua_node_ids").ReferenceTypeIds;

/**
* @method resolveNodeId
* @param node_or_string {NodeId|String}
* @return {NodeId}
*/
function resolveNodeId(node_or_string) {
var _nodeid_to_name_index = {};
var _name_to_nodeid_index = {};

var nodeId;
if (objects.hasOwnProperty(node_or_string)) {
nodeId = makeNodeId(objects[node_or_string], 0);

} else if (referenceTypeIds.hasOwnProperty(node_or_string)) {
nodeId = makeNodeId(referenceTypeIds[node_or_string], 0);
(function build_standard_nodeid_indexes() {

} else if (variables.hasOwnProperty(node_or_string)) {
nodeId = makeNodeId(variables[node_or_string], 0);

} else if (objectTypes.hasOwnProperty(node_or_string)) {
nodeId = makeNodeId(objectTypes[node_or_string], 0);
function expand_map(direct_index) {
for (var name in direct_index) {
if (direct_index.hasOwnProperty(name)) {
var value = direct_index[name];
_nodeid_to_name_index[value] = name;
_name_to_nodeid_index[name] = value;
}
}
}
_nodeid_to_name_index = {};
_name_to_nodeid_index = {};
expand_map( objects);
expand_map( objectTypes);
expand_map( variables);
expand_map( variableTypes);
expand_map( methods);
expand_map( referenceTypeIds);
expand_map( dataTypes);

} else if (variableTypes.hasOwnProperty(node_or_string)) {
nodeId = makeNodeId(variableTypes[node_or_string], 0);
})();

} else if (methods.hasOwnProperty(node_or_string)) {
nodeId = makeNodeId(methods[node_or_string], 0);

} else if (dataTypes.hasOwnProperty(node_or_string)) {
nodeId = makeNodeId(dataTypes[node_or_string], 0);
/**
* @method resolveNodeId
* @param node_or_string {NodeId|String}
* @return {NodeId}
*/
function resolveNodeId(node_or_string) {

var nodeId ;
var raw_id = _name_to_nodeid_index[node_or_string];
if (raw_id) {
nodeId = new NodeId(NodeIdType.NUMERIC, raw_id, 0);
} else {
nodeId = coerceNodeId(node_or_string);
}

return nodeId;
}

exports.resolveNodeId = resolveNodeId;

var _known_NodeIds = null;

function build_reverse_map() {

function expand_map(reverse_index, direct_index) {
for (var name in direct_index) {
if (direct_index.hasOwnProperty(name)) {
var value = direct_index[name];
reverse_index[value] = name;
}
}
}

// build reverse index
_known_NodeIds = {};
expand_map(_known_NodeIds, objects);
expand_map(_known_NodeIds, objectTypes);
expand_map(_known_NodeIds, variables);
expand_map(_known_NodeIds, variableTypes);
expand_map(_known_NodeIds, methods);
expand_map(_known_NodeIds, referenceTypeIds);

}
/**
* @class NodeId
* @method displayText
* @return {String}
*/
NodeId.prototype.displayText = function () {

if (_known_NodeIds === null) {
build_reverse_map();
}

if (this.namespace === 0) {
if (_known_NodeIds.hasOwnProperty(this.value)) {
return _known_NodeIds[this.value] + " (" + this.toString() + ")";
if (_nodeid_to_name_index.hasOwnProperty(this.value)) {
return _nodeid_to_name_index[this.value] + " (" + this.toString() + ")";
}
}
return this.toString();
Expand Down

0 comments on commit 4c6e94e

Please sign in to comment.