mikemalter
08-25-2004, 01:25 AM
I have been looking for a way to give something back to this forum as it has helped me greatly, and I am hoping that this might be of value to someone.
Basically I was just tired of consistantly commenting and uncommenting out alerts in my code so I wrote some code that would allow me to keep my alerts and only show them when I wanted to, and only the types of alerts I wanted to show.
I thought that using bitwise operators would give me the flexibility to specify different options and a quick way of finding out what options were wanted. There are other ways of doing this of course, and this is one approach.
The bitwise OR operator "|" says if one of the two vars has the bit set, then set the bit.
the bitwise AND operator "&" says if both of the two vars has the bit set, then set the bit.
It starts with my bitwise values:
var NONE = new Number(0); // 00000000
var ALL = new Number(1); // 00000001
var INFO = new Number(2); // 00000010
var LOCAL = new Number(4); // 00000100
var PARAM = new Number(8); // 00001000
var COUNT = new Number(16); // 00010000
These values are really important. Earlier I used 0 through 5 and because of the way bitwise operations work, COUNT was equivelant to ALL and PARAM. what you are doing is blending bits and then getting a value. So, in the 0 through 5 approach, COUNT was 00000101 (5). When I OR'd ALL with PARAM I got 00000101 which was a result of 00000001 with 00000100 (4)! So be really careful if you go this route to double check that no combination of vars will equal other vars.
In our constructor we get the value thus:
function FormCheckBase( objForm, blnStateIsDebug, sCulture )
{
this.Form = eval('document.' + objForm);
this.Debug = new Number( blnStateIsDebug );
this.Culture = new String( sCulture );
}
with this call:
objFrm = new FormCheck( 'FormName', INFO | LOCAL | PARAM, sCulture );
Then in the instance methods of the FormCheck class, I wrap my alert boxes.
if ( this.ShowErrorAlert( this.PARAM ) ) // or whatever other value you want.
{
alert( sWhoAmI + "iArrayLength: " + iArrayLength );
alert( sWhoAmI + "blnBlank: " + blnBlank );
}
ShowErrorAlert does a bitwise "AND" to see if we have a match. We are also testing for ALL, and if that is passed originally, we are returning a true to show the alert.
FormCheckBase.prototype.ShowErrorAlert = function( iAlertBit )
{
var bitCompareResult = new Number(0);
var showMe = new Boolean(false);
bitCompareResult = (this.Debug & this.ALL);
showMe = ((bitCompareResult == this.ALL) ? true : false );
alert( showMe );
if ( showMe == true )
return showMe;
bitCompareResult = (this.Debug & iAlertBit);
showMe = ((bitCompareResult == iAlertBit) ? true : false );
return showMe;
};
I also did a couple of helper functions that would change the Debug var before I went into a method and reset it after I was done. Sometimes you might not want every single method to start showing alert boxes. So I did a SetDebugBits that sets the value of Debug and GetDebugBits that gets the current value of Debug. Call GetDebugBits first to store the current value, then call SetDebugBits to set it to whatever you want to use, and then make another call to SetDebugBits with the original value to set it back.
We mostly call our FormCheck constructor with the value of NONE, and then work on a method by method basis as we have lots of methods in the class.
So, I hope this has been presently clearly and is helpful to you.
Basically I was just tired of consistantly commenting and uncommenting out alerts in my code so I wrote some code that would allow me to keep my alerts and only show them when I wanted to, and only the types of alerts I wanted to show.
I thought that using bitwise operators would give me the flexibility to specify different options and a quick way of finding out what options were wanted. There are other ways of doing this of course, and this is one approach.
The bitwise OR operator "|" says if one of the two vars has the bit set, then set the bit.
the bitwise AND operator "&" says if both of the two vars has the bit set, then set the bit.
It starts with my bitwise values:
var NONE = new Number(0); // 00000000
var ALL = new Number(1); // 00000001
var INFO = new Number(2); // 00000010
var LOCAL = new Number(4); // 00000100
var PARAM = new Number(8); // 00001000
var COUNT = new Number(16); // 00010000
These values are really important. Earlier I used 0 through 5 and because of the way bitwise operations work, COUNT was equivelant to ALL and PARAM. what you are doing is blending bits and then getting a value. So, in the 0 through 5 approach, COUNT was 00000101 (5). When I OR'd ALL with PARAM I got 00000101 which was a result of 00000001 with 00000100 (4)! So be really careful if you go this route to double check that no combination of vars will equal other vars.
In our constructor we get the value thus:
function FormCheckBase( objForm, blnStateIsDebug, sCulture )
{
this.Form = eval('document.' + objForm);
this.Debug = new Number( blnStateIsDebug );
this.Culture = new String( sCulture );
}
with this call:
objFrm = new FormCheck( 'FormName', INFO | LOCAL | PARAM, sCulture );
Then in the instance methods of the FormCheck class, I wrap my alert boxes.
if ( this.ShowErrorAlert( this.PARAM ) ) // or whatever other value you want.
{
alert( sWhoAmI + "iArrayLength: " + iArrayLength );
alert( sWhoAmI + "blnBlank: " + blnBlank );
}
ShowErrorAlert does a bitwise "AND" to see if we have a match. We are also testing for ALL, and if that is passed originally, we are returning a true to show the alert.
FormCheckBase.prototype.ShowErrorAlert = function( iAlertBit )
{
var bitCompareResult = new Number(0);
var showMe = new Boolean(false);
bitCompareResult = (this.Debug & this.ALL);
showMe = ((bitCompareResult == this.ALL) ? true : false );
alert( showMe );
if ( showMe == true )
return showMe;
bitCompareResult = (this.Debug & iAlertBit);
showMe = ((bitCompareResult == iAlertBit) ? true : false );
return showMe;
};
I also did a couple of helper functions that would change the Debug var before I went into a method and reset it after I was done. Sometimes you might not want every single method to start showing alert boxes. So I did a SetDebugBits that sets the value of Debug and GetDebugBits that gets the current value of Debug. Call GetDebugBits first to store the current value, then call SetDebugBits to set it to whatever you want to use, and then make another call to SetDebugBits with the original value to set it back.
We mostly call our FormCheck constructor with the value of NONE, and then work on a method by method basis as we have lots of methods in the class.
So, I hope this has been presently clearly and is helpful to you.