<?php
require_once('bitmask.class.php');
echo "<pre>";
// Initiate the bitmask class
$bm = new bitmask;
// Create an array of values
// Notice this is backwards from the binary representation. This is because values are
// inserted from right to left by the nature of bitmasks.
$bitmaskarr = array (0,1,0,0,1,0,0,0,1,1,1,0,1,0,1,1,1);
// Insert the array into the class
$bm->add_element($bitmaskarr);
// Show the mask created from the array
echo $bm->forward_mask . "\n";
// Show the binary representation of the array
echo $bm->bin_mask . "\n";
// This prints the array that was entered. Notice that it is also in reverse order
// from the binary representation.
print_r($bm->mask_array);
// Here we can reset the entire contents by inserting our own bitmask
// this mask represents bits 15, 13, 8, and 4 being set
$bm->reverse_mask('41232');
print_r($bm->mask_array);
// Example of unsetting bit 13
$bm->unset_bit(13);
print_r($bm->mask_array);
// Example of setting bit 6
$bm->set_bit(6);
print_r($bm->mask_array);
$bm->reverse_mask('0'); // reset the object
// Now a more useful example. (for those not familiar with bitmasks)
// We will create an array of items. Lets say someone purchases a lot of widgets
// with various options. We can create a product code from what they choose and
// convert it back and forth and we can always know solely from that code what
// was purchased. (Yes, I know I don't need these keys, they're just for illustration)
$widgets = array( 0 => 'blue',
1 => 'red',
2 => 'yellow',
3 =>'green',
4 => 'purple',
5 => 'small',
6 => 'medium',
7 => 'large',
8 => 'X-large',
9 => 'hard',
10 => 'soft');
// enter the key values for the options
$bm->assoc_keys = $widgets;
// from a form, you find that the person wants a hard green extra large widget.
// so we enter 10,8, and 3 into our bitmask.
$customer_order = array(10,8,3);
foreach ($customer_order as $option) {
$bm->set_bit($option);
}
// Now we have our product code. (1288)
echo $bm->forward_mask;
// If we ever need to convert that product code back to real text, we just have to
// enter it into our class and it gets converted back.
$bm->reverse_mask('1288');
// Get the class to return the options for the widget.
print_r($bm->assoc_get(false));
// One final example. Query an individual bit to see if the option is set.
echo $bm->bit_isset(3)?'true':'false';
// bitmasks can also be used for verification of user priveleges, storing user settings in a
// simple fashion, and various other things. Any time you have a list of things that can either
// be true or false, you just have to pull out a bitmask to make life easy.
echo "</pre>";
?>
|