|
|
|
@ -81,7 +81,7 @@ var nameToStateMap = {
|
|
|
|
|
'inherit': 3
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
var nameToSwitchMap = {
|
|
|
|
|
var nameToSwitchStateMap = {
|
|
|
|
|
'true': true,
|
|
|
|
|
'false': false,
|
|
|
|
|
'on': false, // backward compatibility
|
|
|
|
@ -242,9 +242,7 @@ Matrix.prototype.setSwitch = function(switchName, srcHostname, newState) {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
var bits = this.switches[srcHostname] || 0;
|
|
|
|
|
bits &= ~(3 << bitOffset);
|
|
|
|
|
bits |= newState ? 1 << bitOffset : 3 << bitOffset;
|
|
|
|
|
this.switches[srcHostname] = bits;
|
|
|
|
|
this.switches[srcHostname] = (bits & ~(3 << bitOffset)) | ((newState ? 1 : 2) << bitOffset);
|
|
|
|
|
return true;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
@ -497,16 +495,15 @@ Matrix.prototype.setSwitchZ = function(switchName, srcHostname, newState) {
|
|
|
|
|
if ( state === newState ) {
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
bits |= newState ? 1 << bitOffset : 3 << bitOffset;
|
|
|
|
|
this.switches[srcHostname] = bits;
|
|
|
|
|
this.switches[srcHostname] = bits | ((newState ? 1 : 2) << bitOffset);
|
|
|
|
|
return true;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/******************************************************************************/
|
|
|
|
|
|
|
|
|
|
// 0 = default state, which meaning depends on the switch
|
|
|
|
|
// 0 = inherit from broader scope, up to default state
|
|
|
|
|
// 1 = non-default state
|
|
|
|
|
// 3 = forced default state (to override a broader non-default state)
|
|
|
|
|
// 2 = forced default state (to override a broader non-default state)
|
|
|
|
|
|
|
|
|
|
Matrix.prototype.evaluateSwitch = function(switchName, srcHostname) {
|
|
|
|
|
var bits = this.switches[srcHostname] || 0;
|
|
|
|
@ -517,16 +514,11 @@ Matrix.prototype.evaluateSwitch = function(switchName, srcHostname) {
|
|
|
|
|
if ( bitOffset === undefined ) {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
bits = bits >> bitOffset & 3;
|
|
|
|
|
return bits === 1;
|
|
|
|
|
return ((bits >> bitOffset) & 3) === 1;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/******************************************************************************/
|
|
|
|
|
|
|
|
|
|
// 0 = default state, which meaning depends on the switch
|
|
|
|
|
// 1 = non-default state
|
|
|
|
|
// 3 = forced default state (to override a broader non-default state)
|
|
|
|
|
|
|
|
|
|
Matrix.prototype.evaluateSwitchZ = function(switchName, srcHostname) {
|
|
|
|
|
var bitOffset = switchBitOffsets[switchName];
|
|
|
|
|
if ( bitOffset === undefined ) {
|
|
|
|
@ -690,16 +682,10 @@ Matrix.prototype.fromString = function(text, append) {
|
|
|
|
|
// Switch on/off
|
|
|
|
|
|
|
|
|
|
// `switch:` srcHostname state
|
|
|
|
|
// state = [`on`, `off`]
|
|
|
|
|
// state = [`true`, `false`]
|
|
|
|
|
switchName = '';
|
|
|
|
|
pos = fieldVal.indexOf('switch:');
|
|
|
|
|
if ( pos !== -1 ) {
|
|
|
|
|
if ( fieldVal === 'switch:' || fieldVal === 'matrix:' ) {
|
|
|
|
|
fieldVal = 'matrix-off:';
|
|
|
|
|
} else {
|
|
|
|
|
pos = fieldVal.indexOf('matrix:');
|
|
|
|
|
if ( pos !== -1 ) {
|
|
|
|
|
fieldVal = 'matrix-off:';
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
pos = fieldVal.indexOf(':');
|
|
|
|
|
if ( pos !== -1 ) {
|
|
|
|
@ -714,16 +700,15 @@ Matrix.prototype.fromString = function(text, append) {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
// Unknown state: reject
|
|
|
|
|
if ( nameToSwitchMap.hasOwnProperty(fieldVal) === false ) {
|
|
|
|
|
if ( nameToSwitchStateMap.hasOwnProperty(fieldVal) === false ) {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
matrix.setSwitch(switchName, srcHostname, nameToSwitchMap[fieldVal]);
|
|
|
|
|
matrix.setSwitch(switchName, srcHostname, nameToSwitchStateMap[fieldVal]);
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Unknown directive
|
|
|
|
|
|
|
|
|
|
pos = fieldVal.indexOf(':');
|
|
|
|
|
if ( pos !== -1 ) {
|
|
|
|
|
continue;
|
|
|
|
|