Section Header
  
  
    + name    := COLLECTION3[E];
  
  
    - comment := "Abstract definition of a 3 dimensional collection of elements of type E.";
  
  
 The Lisaac standard library provides two implementations of COLLECTION3: ARRAY3 
  
 and FAST_ARRAY3. All implementations have exactly the same behavior. 
  
 Switching from one implementation to another only change the memory 
  
 used and the execution time.
  
Section Inherit
  
  
    - parent_safe_equal:SAFE_EQUAL[E] := 
  
Section Public
  
  
    - lower1:INTEGER <-
  
         Lower index bound for dimension 1.
      
  
    - lower2:INTEGER <-
  
         Lower index bound for dimension 2.
      
  
    - lower3:INTEGER <-
  
         Lower index bound for dimension 3.
      
  
    - line_minimum:INTEGER <- 
  
         Equivalent of `lower1'.
  
  
    - column_minimum:INTEGER <- 
  
         Equivalent of `lower2'.
  
  
    - depth_minimum:INTEGER <- 
  
         Equivalent of `lower3'.
  
  
    - upper1:INTEGER <-
  
         Upper index bound for dimension 1.
      
  
    - upper2:INTEGER <-
  
         Upper index bound for dimension 2.
      
  
    - upper3:INTEGER <-
  
         Upper index bound for dimension 3.
      
  
    - line_maximum:INTEGER <- 
  
         Equivalent of `upper1'.
  
  
    - column_maximum:INTEGER <- 
  
         Equivalent of `upper2'.
  
  
    - depth_maximum:INTEGER <- 
  
         Equivalent of `upper3'.
  
  
  
 Reading:
  
  
    - item (line, column, depth:INTEGER) :E <-
    
  
  
 Writing:
  
  
    - put element:E to (line, column, depth:INTEGER) <-
  
    
  
    - force element:E to (line, column, depth:INTEGER) <-
  
         Put `element' at position (`line',`column',`depth').
  
         Collection is resized first when (`line',`column',`depth')
  
         is not inside current bounds.
  
         New bounds are initialized with default values.
    
  
  
 Index validity:
  
  
  
    - valid_line line:INTEGER :BOOLEAN <-
  
    
  
    - valid_index1 line:INTEGER :BOOLEAN <- 
  
  
    - valid_column column:INTEGER :BOOLEAN <-
  
    
  
    - valid_index2 column:INTEGER :BOOLEAN <- 
  
  
    - valid_depth depth:INTEGER :BOOLEAN <-
  
    
  
    - valid_index3 depth:INTEGER :BOOLEAN <- 
  
  
    - valid_index (line, column, depth:INTEGER) :BOOLEAN <-
  
  
  
  
 Counting:
  
  
  
    - count1:INTEGER <-
  
         Size of the first dimension.
  
  
  
    - line_count:INTEGER <- 
  
         Equivalent of `count1'.
  
  
    - count2:INTEGER <-
  
         Size of the second dimension.
  
    
  
    - column_count:INTEGER <- 
  
         Equivalent of `count2'.
  
  
    - count3:INTEGER <-
  
         Size of the third dimension.
  
    
  
    - depth_count:INTEGER <- 
  
         Equivalent of `count3'.
    
  
    - count:INTEGER <-
  
         Total number of elements.
  
  
    - swap (line1, column1, depth1:INTEGER) with (line2, column2, depth2:INTEGER) <-
  
         Swap the element at index (`line1',`column1',`depth1')
  
         with the element at index (`line2',`column2',`depth2').
      
  
    - set_all_with v:E <-
  
         Set all item with value `v'.
  
  
    - clear_all <-
  
         Set all items to default values.
    
  
  
 Creating or initializing:
  
  
  
    - from_collection3 model:COLLECTION3[E] <-
  
          Uses `model' to initialize self.
      
  
    - from_model model:COLLECTION[COLLECTION[COLLECTION[E]]] <-
  
         The `model' is used to fill line by line self.
  
         Assume all sub-collections have the same
  
         dimension.
    
  
  
 Looking and comparison:
  
  
    - all_default:BOOLEAN <-
  
         Do all items have their type's default value?
    
  
    - '==' other:COLLECTION3[E] :BOOLEAN <-
  
         Do both collections have the same `lower1', `lower2', `lower3', `upper1', `upper2' and
  
         `upper3', and items?
  
         The basic `=' is used for comparison of items.
  
        
  
         See also `is_equal_map'.
  
  
    - is_equal_map other: COLLECTION3[E] :BOOLEAN <-
  
         Do both collections have the same `lower1', `lower2', `lower3', `upper1', `upper2' and `upper3',
  
         and items?  
  
        
  
         See also `=='.
    
  
  
 Printing:
  
  
    - fill_tagged_out_memory <-
    
  
  
 Miscellaneous features:
  
  
  
    - occurrences elt:E :INTEGER <-
  
         Number of occurrences using `equal'.
  
        
  
         See also `fast_occurrences' to choose the apropriate one.
  
  
    - fast_occurrences elt:E :INTEGER <-
  
         Number of occurrences using `='.
  
        
  
         See also `occurrences' to choose the apropriate one.
  
  
    - has x:E :BOOLEAN <-
  
         Search if a element x is in the array using `equal'.
  
        
  
         See also `fast_has' to choose the apropriate one.
        
  
    - fast_has x:E :BOOLEAN <-
  
         Search if a element x is in the array using `='.
        
  
    - replace_all old_value:E with new_value:E <-
  
         Replace all occurences of the element `old_value' by `new_value'
  
         using `equal' for comparison.
  
        
  
         See also `fast_replace_all' to choose the apropriate one.
        
  
    - fast_replace_all old_value:E with new_value:E <-
  
         Replace all occurences of the element `old_value' by `new_value'
  
         using operator `=' for comparison.
  
        
  
         See also `replace_all' to choose the apropriate one.
          
  
    - sub_collection3 (line_min, column_min, depth_min:INTEGER) 
  to (line_max, column_max, depth_max:INTEGER) :SELF <-
  
         Create a new object using selected area of `self'.
  
  
  
    - set_area (line_min, column_min, depth_min:INTEGER) 
  to (line_max, column_max, depth_max:INTEGER) with element:E <-
  
         Set all the elements of the selected area rectangle with `element'.