1 dump('entering util/functional.js\n');
3 if (typeof util == 'undefined') var util = {};
6 util.functional.EXPORT_OK = [
7 'filter_list', 'filter_object', 'find_list', 'find_object', 'map_list', 'map_flat_list',
8 'map_object', 'map_object_to_list', 'convert_object_list_to_hash', 'find_id_object_in_list',
9 'find_attr_object_in_list', 'walk_tree_preorder', 'unique_list_values',
11 util.functional.EXPORT_TAGS = { ':all' : util.functional.EXPORT_OK };
13 util.functional.filter_list = function(list,f) {
15 for (var i = 0; i < list.length; i++) {
17 if (t) new_list.push( list[i] );
22 util.functional.filter_object = function(obj,f) {
25 var t = f( i, obj[i] );
26 if (t) new_obj[i] = obj[i];
31 util.functional.find_list = function(list,f) {
32 for (var i = 0; i < list.length; i++) {
34 if (t) return list[i];
39 util.functional.find_object = function(obj,f) {
41 var t = f( i, obj[i] );
47 util.functional.walk_tree_preorder = function(node,children_func,f,parent_node) {
49 var children = children_func( node );
50 if (children) for (var i = 0; i < children.length; i++) {
51 util.functional.walk_tree_preorder(
60 util.functional.map_list = function(list,f) {
61 var new_list = []; var idx = 0;
63 new_list.push( f( list[i], idx++ ) );
68 util.functional.map_flat_list = function(list,f) {
71 new_list = new_list.concat( f( list[i] ) );
76 util.functional.map_object = function(obj,f) {
79 new_obj[ f( i, obj[i] )[0] ] = f( i, obj[i] )[1];
84 util.functional.map_object_to_list = function(obj,f) {
87 new_list.push( f( obj, i ) );
92 util.functional.convert_object_list_to_hash = function(list) {
93 var my_hash = new Object();
95 for (var i = 0; i < list.length; i++) {
96 if (typeof list[i].id == 'function') {
97 my_hash[ list[i].id() ] = list[i];
98 } else if (typeof list[i].code == 'function') {
99 my_hash[ list[i].code() ] = list[i];
106 util.functional.find_id_object_in_list = function(list,id) {
108 for (var i = 0; i < list.length; i++ ) {
110 if ( list[i].id() == id ) {
121 util.functional.find_attr_object_in_list = function(list,attr,value) {
123 for (var i = 0; i < list.length; i++ ) {
125 var command = 'list[' + i + '].'+attr+'() == ' + value;
126 if ( eval(command) ) {
137 util.functional.unique_list_values = function(list) {
139 var finished_list = [];
140 for (var i in list) { obj[list[i]] = true; }
141 for (var i in obj) { finished_list.push(i); }
142 return finished_list;
145 dump('exiting util/functional.js\n');