MatrixAccessor.st
author Claus Gittinger <cg@exept.de>
Thu, 22 Aug 2019 01:20:06 +0200
changeset 24590 ff4bec55dc15
parent 24589 81c73a67aac1
child 24677 ffd6bccad375
permissions -rw-r--r--
#FEATURE by exept class: MatrixAccessor added: #isSquare
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
24575
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     1
"{ Package: 'stx:libbasic' }"
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     2
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     3
"{ NameSpace: Smalltalk }"
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     4
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     5
AbstractMultidimensionalArray variableSubclass:#MatrixAccessor
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     6
	instanceVariableNames:'array dimensions'
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     7
	classVariableNames:''
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     8
	poolDictionaries:''
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     9
	category:'Collections-MultiDimensional'
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    10
!
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    11
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    12
!MatrixAccessor class methodsFor:'documentation'!
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    13
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    14
documentation
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    15
"
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    16
    Matrix-Access for arbitrary sequentiable collections.
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    17
    Allows arbitrary collections to function as matrices.
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    18
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    19
    [author:]
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    20
        Claus Gittinger (cg@sinir)
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    22
    [instance variables:]
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    23
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    24
    [class variables:]
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    25
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    26
    [see also:]
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    27
        Matrix
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    28
"
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    29
!
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    30
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    31
examples
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    32
"
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    33
  You have to enable the Parsers arrayIndexingExtension support
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    34
  in order to be able to execute the examples below.
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    35
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    36
  Parser allowArrayIndexSyntaxExtension:true
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    37
                                                                [exBegin]
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    38
    |m|
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    39
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    40
    m := FloatArray[3,3].
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    41
    m [2,1] := 1.  
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    42
    m [2,2] := 2.  
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    43
    m [2,3] := 3.  
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    44
    m     
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    45
                                                                [exEnd]
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    46
"
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    47
! !
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    48
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    49
!MatrixAccessor class methodsFor:'instance creation'!
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    50
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    51
collection:coll dimensions:dimensions
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    52
    ^ self new collection:coll dimensions:dimensions
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    53
! !
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    54
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    55
!MatrixAccessor methodsFor:'accessing'!
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    56
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    57
_at:index
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    58
    "this is a synthetic selector, generated by the compiler,
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    59
     if a construct of the form expr[idx...] is parsed.
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    60
     I.e. 
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    61
        foo[n]
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    62
     generates
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    63
        foo _at: n
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    64
    "
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    65
    dimensions size ~~ 1 ifTrue:[self dimensionError].
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    66
    ^ array at:index.
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    67
!
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    68
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    69
_at:index1 at:index2
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    70
    "this is a synthetic selector, generated by the compiler,
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    71
     if a construct of the form expr[idx...] is parsed.
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    72
     I.e. 
24587
d46ade408aea #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 24575
diff changeset
    73
        foo[n][m]
24575
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    74
     generates
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    75
        foo _at:n at:m
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    76
    "
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    77
    |idx|
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    78
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    79
    dimensions size ~~ 2 ifTrue:[self dimensionError].
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    80
    (index1 between:1 and:(dimensions at:1)) ifFalse:[self subscriptBoundsError:index1].
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    81
    (index2 between:1 and:(dimensions at:2)) ifFalse:[self subscriptBoundsError:index2].
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    82
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    83
    idx := ((index1-1) * (dimensions at:2)).
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    84
    idx := idx + index2.
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    85
    ^ array at:idx.
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    86
!
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    87
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    88
_at:index1 at:index2 at:index3
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    89
    "this is a synthetic selector, generated by the compiler,
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    90
     if a construct of the form expr[idx...] is parsed.
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    91
     I.e. 
24587
d46ade408aea #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 24575
diff changeset
    92
        foo[n][m][o]
24575
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    93
     generates
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    94
        foo _at:n at:m at:o
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    95
    "
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    96
    |idx|
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    97
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    98
    dimensions size ~~ 3 ifTrue:[self dimensionError].
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    99
    (index1 between:1 and:(dimensions at:1)) ifFalse:[self subscriptBoundsError:index1].
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   100
    (index2 between:1 and:(dimensions at:2)) ifFalse:[self subscriptBoundsError:index2].
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   101
    (index3 between:1 and:(dimensions at:3)) ifFalse:[self subscriptBoundsError:index3].
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   102
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   103
    idx := ((((index1-1) * (dimensions at:2)) + (index2-1)) * (dimensions at:3)).
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   104
    idx := idx + index3.
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   105
    ^ array at:idx.
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   106
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   107
    "
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   108
     |m|
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   109
     m := MatrixAccessor new
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   110
              collection:
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   111
                #(
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   112
                   111 112 113 114
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   113
                   121 122 123 124
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   114
                   131 132 133 134
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   115
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   116
                   211 212 213 214
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   117
                   221 222 223 224
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   118
                   231 232 233 234 )
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   119
              dimensions:
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   120
                #(2 3 4).
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   121
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   122
     m[2,1,4]          
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   123
    "
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   124
!
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   125
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   126
_at:index1 at:index2 at:index3 put:val
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   127
    "this is a synthetic selector, generated by the compiler,
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   128
     if a construct of the form expr[idx...] := val is parsed.
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   129
     I.e. 
24587
d46ade408aea #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 24575
diff changeset
   130
        foo[n][m][o] := val
24575
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   131
     generates
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   132
        foo _at:n at:m at:o put:val
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   133
    "
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   134
    |idx|
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   135
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   136
    dimensions size ~~ 3 ifTrue:[self dimensionError].
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   137
    (index1 between:1 and:(dimensions at:1)) ifFalse:[self subscriptBoundsError:index1].
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   138
    (index2 between:1 and:(dimensions at:2)) ifFalse:[self subscriptBoundsError:index2].
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   139
    (index3 between:1 and:(dimensions at:3)) ifFalse:[self subscriptBoundsError:index3].
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   140
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   141
    idx := ((((index1-1) * (dimensions at:2)) + (index2-1)) * (dimensions at:3)).
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   142
    idx := idx + index3.
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   143
    ^ array at:idx put:val.
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   144
!
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   145
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   146
_at:index1 at:index2 put:val
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   147
    "this is a synthetic selector, generated by the compiler,
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   148
     if a construct of the form expr[idx...] := val is parsed.
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   149
     I.e. 
24587
d46ade408aea #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 24575
diff changeset
   150
        foo[n][m] := val
24575
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   151
     generates
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   152
        foo _at:n at:m put:val
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   153
    "
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   154
    |idx|
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   155
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   156
    dimensions size ~~ 2 ifTrue:[self dimensionError].
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   157
    (index1 between:1 and:(dimensions at:1)) ifFalse:[self subscriptBoundsError:index1].
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   158
    (index2 between:1 and:(dimensions at:2)) ifFalse:[self subscriptBoundsError:index2].
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   159
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   160
    idx := ((index1-1) * (dimensions at:2)).
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   161
    idx := idx + index2.
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   162
    ^ array at:idx put:val.
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   163
!
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   164
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   165
_at:index put:val
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   166
    "this is a synthetic selector, generated by the compiler,
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   167
     if a construct of the form expr[idx...] := val is parsed.
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   168
     I.e. 
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   169
        foo[n] := val
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   170
     generates
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   171
        foo _at:n put:val
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   172
    "
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   173
    dimensions size ~~ 1 ifTrue:[self dimensionError].
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   174
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   175
    ^ array at:index put:val.
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   176
!
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   177
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   178
at:index
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   179
    "/ dimensions size ~~ 1 ifTrue:[self dimensionError].
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   180
    ^ array at:index.
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   181
!
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   182
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   183
at:index put:val
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   184
    "/ dimensions size ~~ 1 ifTrue:[self dimensionError].
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   185
    ^ array at:index put:val.
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   186
!
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   187
24589
81c73a67aac1 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24587
diff changeset
   188
dimensions
81c73a67aac1 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24587
diff changeset
   189
    ^ dimensions 
81c73a67aac1 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24587
diff changeset
   190
81c73a67aac1 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24587
diff changeset
   191
!
81c73a67aac1 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24587
diff changeset
   192
24575
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   193
size
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   194
    ^ dimensions inject:1 into:[:szSoFar :thisDim | szSoFar * thisDim].
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   195
! !
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   196
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   197
!MatrixAccessor methodsFor:'private-initialization'!
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   198
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   199
collection:arrayArg dimensions:dimensionsArg
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   200
    array := arrayArg.
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   201
    dimensions := dimensionsArg.
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   202
! !
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   203
24590
ff4bec55dc15 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24589
diff changeset
   204
!MatrixAccessor methodsFor:'queries'!
ff4bec55dc15 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24589
diff changeset
   205
ff4bec55dc15 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24589
diff changeset
   206
isSquare
ff4bec55dc15 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24589
diff changeset
   207
    ^ dimensions size == 2
ff4bec55dc15 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24589
diff changeset
   208
    and:[(dimensions at:1) == (dimensions at:2)]
ff4bec55dc15 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24589
diff changeset
   209
! !
ff4bec55dc15 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24589
diff changeset
   210
24575
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   211
!MatrixAccessor class methodsFor:'documentation'!
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   212
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   213
version_CVS
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   214
    ^ '$Header$'
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   215
! !
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   216