/**
 * Contains some simul_efuns.
 * @author Pinkfish
 */
string mapping_to_string( mapping map );
/**
 * This method converts and input array into a string.
 * @param args the array to convert
 * @return the string value of the array
 * @see mapping_to_string()
 */
string array_to_string( mixed *args ) {
    int i;
    args = copy(args);
    for( i = sizeof(args) - 1; i > -1; i-- ) {
        if( pointerp( args[ i ] ) ) {
            args[ i ] = array_to_string( args[ i ] );
            continue;
        }
      
        if( mappingp( args[ i ] ) ) {
            args[ i ] = mapping_to_string( args[ i ] );
            continue;
        }
        args[ i ] = sprintf("%O", args[ i ] );
    } 
 
    return "({ "+implode( args, ", ")+" })";
} /* array_to_string() */
/**
 * This method converts and input mapping into a string.
 * @param args the mapping to convert
 * @return the string value of the mapping
 * @see array_to_string()
 */
string mapping_to_string( mapping map ) {
    int i;
    mixed *args;
    if( !mappingp( map ) ) { 
        // If this breaks badly, blame the idiot calling this function
        // with a functionpointer instead of a mapping as argument!
        // - Olorin
        return sprintf("%O", map );
    }
    args = keys(map);
    for( i = sizeof(args) - 1; i > -1; i-- ) {
        if( pointerp( map[ args[ i ] ] ) ) {
            args[ i ] = sprintf( "%O : %s", args[ i ],
                array_to_string( map[ args[ i ] ] ) );
            continue;
        }
        if( mappingp( map[ args[ i ] ] ) ) {
            args[ i ] = sprintf("%O : %s", args[ i ],
                mapping_to_string( map[ args[ i ] ] ) );
            continue;
        }
        
        args[ i ] = sprintf("%O : %O", args[ i ], map[ args[ i ] ] );
    }
    return "([ "+implode( args, ", ")+" ])";
} /* mapping_to_string() */