Thread: Custom Classes!
View Single Post
  #17  
Old 12-09-2007, 10:32 PM
Novo Novo is offline
[TServerDeveloper]
Join Date: Jun 2006
Posts: 448
Novo will become famous soon enough
Quote:
Originally Posted by Inverness View Post
If...
Anyhow...

I made an addition to my TMap set. For those of you who want to use it, I've made a static function for it:

class_tmap_static (Class)
PHP Code:
public function mergemap1map2mergeRules )
{
  
// Sanity Check
  
if ( !map1.instanceOf( TMap ) || !map2.instanceOf( TMap ))
  {
    echo(
"Input aren't TMaps!");
    return 
null// Force programmer to input CORRECT Data!
  
}

  
// Change Merger to supplied one
  
temp.oldMerger this.mergeValue;
  if ( 
mergeRules != null )
    
this.mergeValue mergeRules;

  
// Copy first Map to a new map
  
temp.sum this.newInstancemap1.toArray() );
  
temp.keys temp.sum.keySet();

  
// Add second map to new map
  
temp.mapSet map2.toArray();
  for ( 
temp.mapValuetemp.mapSet )
  {
    
// If new map contains given key
    
if ( temp.mapValue[0in temp.keys )
    {
      
// Merge them together
      
temp.newValue mergeValue(
        
temp.mapValue[0], // key
          
temp.mapValue[1], // val1
          
temp.sum.gettemp.mapValue[0] ) // val2
        
);
      
      
temp.sum.puttemp.mapValue[0], temp.newValue );
    } else {
      
// Otherwise, put second map data to the new map.
      
temp.sum.puttemp.mapValue[0], temp.mapValue[1] );
    }
  }
  
  
// Revert back to old merger
  
this.mergeValue temp.oldMerger;  

  return 
temp.sum;
}

function 
mergeValuekeyval1val2 )
// Default
  // val1 + val2 should be the same as val2 + val1.
  
return (val1 val2);

Example of Usage:
PHP Code:
function onCreated()
{
  
mod1 TMap.newInstance({{"a",3}, {"b"1}} );
  
mod2 TMap.newInstance({{"a",2}, {"b"1}, {"c"1}} );

  
temp.merger = function( keyval1val2 ) {
    switch ( 
key )
    {
      case 
"a":
        return 
val1 val2;
      default:
        return 
val1 val2;
    }
  };

  
mod3 TMap.mergemod1mod2temp.merger );
  echo( 
mod3.toArray() ); // "a,6","b,2","c,1"

Reply With Quote