MatrixAccessor.st
author Stefan Vogel <sv@exept.de>
Tue, 28 Apr 2020 16:22:44 +0200
changeset 25376 88a3329875ba
parent 25121 d3591d0375df
permissions -rw-r--r--
#REFACTORING by stefan class: MethodDictionary class removed: #newWithCapacity: moved to superclass
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
24677
ffd6bccad375 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 24590
diff changeset
     1
"{ Encoding: utf8 }"
ffd6bccad375 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 24590
diff changeset
     2
25121
d3591d0375df #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 24678
diff changeset
     3
"
d3591d0375df #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 24678
diff changeset
     4
 COPYRIGHT (c) 2018 by eXept Software AG
d3591d0375df #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 24678
diff changeset
     5
              All Rights Reserved
d3591d0375df #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 24678
diff changeset
     6
d3591d0375df #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 24678
diff changeset
     7
 This software is furnished under a license and may be used
d3591d0375df #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 24678
diff changeset
     8
 only in accordance with the terms of that license and with the
d3591d0375df #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 24678
diff changeset
     9
 inclusion of the above copyright notice.   This software may not
d3591d0375df #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 24678
diff changeset
    10
 be provided or otherwise made available to, or used by, any
d3591d0375df #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 24678
diff changeset
    11
 other person.  No title to or ownership of the software is
d3591d0375df #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 24678
diff changeset
    12
 hereby transferred.
d3591d0375df #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 24678
diff changeset
    13
"
24575
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    14
"{ Package: 'stx:libbasic' }"
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    15
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    16
"{ NameSpace: Smalltalk }"
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    17
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    18
AbstractMultidimensionalArray variableSubclass:#MatrixAccessor
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    19
	instanceVariableNames:'array dimensions'
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    20
	classVariableNames:''
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
	poolDictionaries:''
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    22
	category:'Collections-MultiDimensional'
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    23
!
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    24
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    25
!MatrixAccessor class methodsFor:'documentation'!
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    26
25121
d3591d0375df #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 24678
diff changeset
    27
copyright
d3591d0375df #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 24678
diff changeset
    28
"
d3591d0375df #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 24678
diff changeset
    29
 COPYRIGHT (c) 2018 by eXept Software AG
d3591d0375df #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 24678
diff changeset
    30
              All Rights Reserved
d3591d0375df #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 24678
diff changeset
    31
d3591d0375df #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 24678
diff changeset
    32
 This software is furnished under a license and may be used
d3591d0375df #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 24678
diff changeset
    33
 only in accordance with the terms of that license and with the
d3591d0375df #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 24678
diff changeset
    34
 inclusion of the above copyright notice.   This software may not
d3591d0375df #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 24678
diff changeset
    35
 be provided or otherwise made available to, or used by, any
d3591d0375df #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 24678
diff changeset
    36
 other person.  No title to or ownership of the software is
d3591d0375df #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 24678
diff changeset
    37
 hereby transferred.
d3591d0375df #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 24678
diff changeset
    38
"
d3591d0375df #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 24678
diff changeset
    39
!
d3591d0375df #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 24678
diff changeset
    40
24575
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    41
documentation
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    42
"
24677
ffd6bccad375 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 24590
diff changeset
    43
    Matrix-Access for arbitrary sequenceable collections.
24678
c52690dca84a #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 24677
diff changeset
    44
    Allows arbitrary collections which offer access by an integer index
c52690dca84a #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 24677
diff changeset
    45
    to function as matrices.
24575
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    46
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    47
    [author:]
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    48
        Claus Gittinger (cg@sinir)
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    49
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    50
    [instance variables:]
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    51
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    52
    [class variables:]
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    53
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    54
    [see also:]
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    55
        Matrix
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    56
"
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    57
!
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    58
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    59
examples
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    60
"
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    61
  You have to enable the Parsers arrayIndexingExtension support
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    62
  in order to be able to execute the examples below.
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    63
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    64
  Parser allowArrayIndexSyntaxExtension:true
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    65
                                                                [exBegin]
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    66
    |m|
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    67
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    68
    m := FloatArray[3,3].
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    69
    m [2,1] := 1.  
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    70
    m [2,2] := 2.  
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    71
    m [2,3] := 3.  
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    72
    m     
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    73
                                                                [exEnd]
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    74
"
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    75
! !
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    76
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    77
!MatrixAccessor class methodsFor:'instance creation'!
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    78
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    79
collection:coll dimensions:dimensions
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    80
    ^ self new collection:coll dimensions:dimensions
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    81
! !
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    82
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    83
!MatrixAccessor methodsFor:'accessing'!
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    84
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    85
_at:index
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    86
    "this is a synthetic selector, generated by the compiler,
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    87
     if a construct of the form expr[idx...] is parsed.
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    88
     I.e. 
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    89
        foo[n]
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    90
     generates
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    91
        foo _at: n
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    92
    "
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    93
    dimensions size ~~ 1 ifTrue:[self dimensionError].
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    94
    ^ array at:index.
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    95
!
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    96
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    97
_at:index1 at:index2
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    98
    "this is a synthetic selector, generated by the compiler,
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    99
     if a construct of the form expr[idx...] is parsed.
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   100
     I.e. 
24587
d46ade408aea #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 24575
diff changeset
   101
        foo[n][m]
24575
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   102
     generates
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   103
        foo _at:n at:m
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   104
    "
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   105
    |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
    dimensions size ~~ 2 ifTrue:[self dimensionError].
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   108
    (index1 between:1 and:(dimensions at:1)) ifFalse:[self subscriptBoundsError:index1].
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   109
    (index2 between:1 and:(dimensions at:2)) ifFalse:[self subscriptBoundsError:index2].
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   110
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   111
    idx := ((index1-1) * (dimensions at:2)).
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   112
    idx := idx + index2.
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   113
    ^ array at:idx.
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   114
!
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   115
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   116
_at:index1 at:index2 at:index3
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   117
    "this is a synthetic selector, generated by the compiler,
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   118
     if a construct of the form expr[idx...] is parsed.
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   119
     I.e. 
24587
d46ade408aea #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 24575
diff changeset
   120
        foo[n][m][o]
24575
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   121
     generates
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   122
        foo _at:n at:m at:o
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   123
    "
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   124
    |idx|
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   125
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   126
    dimensions size ~~ 3 ifTrue:[self dimensionError].
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   127
    (index1 between:1 and:(dimensions at:1)) ifFalse:[self subscriptBoundsError:index1].
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   128
    (index2 between:1 and:(dimensions at:2)) ifFalse:[self subscriptBoundsError:index2].
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   129
    (index3 between:1 and:(dimensions at:3)) ifFalse:[self subscriptBoundsError:index3].
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   130
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   131
    idx := ((((index1-1) * (dimensions at:2)) + (index2-1)) * (dimensions at:3)).
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   132
    idx := idx + index3.
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   133
    ^ array at:idx.
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   134
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   135
    "
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   136
     |m|
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   137
     m := MatrixAccessor new
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   138
              collection:
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   139
                #(
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   140
                   111 112 113 114
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   141
                   121 122 123 124
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   142
                   131 132 133 134
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   143
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   144
                   211 212 213 214
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   145
                   221 222 223 224
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   146
                   231 232 233 234 )
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   147
              dimensions:
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   148
                #(2 3 4).
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   149
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   150
     m[2,1,4]          
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   151
    "
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   152
!
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   153
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   154
_at:index1 at:index2 at:index3 put:val
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   155
    "this is a synthetic selector, generated by the compiler,
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   156
     if a construct of the form expr[idx...] := val is parsed.
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   157
     I.e. 
24587
d46ade408aea #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 24575
diff changeset
   158
        foo[n][m][o] := val
24575
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   159
     generates
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   160
        foo _at:n at:m at:o put:val
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   161
    "
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   162
    |idx|
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   163
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   164
    dimensions size ~~ 3 ifTrue:[self dimensionError].
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   165
    (index1 between:1 and:(dimensions at:1)) ifFalse:[self subscriptBoundsError:index1].
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   166
    (index2 between:1 and:(dimensions at:2)) ifFalse:[self subscriptBoundsError:index2].
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   167
    (index3 between:1 and:(dimensions at:3)) ifFalse:[self subscriptBoundsError:index3].
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   168
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   169
    idx := ((((index1-1) * (dimensions at:2)) + (index2-1)) * (dimensions at:3)).
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   170
    idx := idx + index3.
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   171
    ^ array at:idx 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
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   174
_at:index1 at:index2 put:val
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   175
    "this is a synthetic selector, generated by the compiler,
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   176
     if a construct of the form expr[idx...] := val is parsed.
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   177
     I.e. 
24587
d46ade408aea #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 24575
diff changeset
   178
        foo[n][m] := val
24575
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   179
     generates
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   180
        foo _at:n at:m put:val
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   181
    "
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   182
    |idx|
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   183
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   184
    dimensions size ~~ 2 ifTrue:[self dimensionError].
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   185
    (index1 between:1 and:(dimensions at:1)) ifFalse:[self subscriptBoundsError:index1].
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   186
    (index2 between:1 and:(dimensions at:2)) ifFalse:[self subscriptBoundsError:index2].
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   187
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   188
    idx := ((index1-1) * (dimensions at:2)).
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   189
    idx := idx + index2.
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   190
    ^ array at:idx put:val.
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   191
!
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   192
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   193
_at:index put:val
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   194
    "this is a synthetic selector, generated by the compiler,
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   195
     if a construct of the form expr[idx...] := val is parsed.
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   196
     I.e. 
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   197
        foo[n] := val
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   198
     generates
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   199
        foo _at:n put:val
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   200
    "
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   201
    dimensions size ~~ 1 ifTrue:[self dimensionError].
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   202
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   203
    ^ array at:index put:val.
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   204
!
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   205
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   206
at:index
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   207
    "/ dimensions size ~~ 1 ifTrue:[self dimensionError].
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   208
    ^ array at:index.
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   209
!
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   210
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   211
at:index put:val
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   212
    "/ dimensions size ~~ 1 ifTrue:[self dimensionError].
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   213
    ^ array at:index put:val.
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   214
!
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   215
24589
81c73a67aac1 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24587
diff changeset
   216
dimensions
81c73a67aac1 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24587
diff changeset
   217
    ^ dimensions 
81c73a67aac1 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24587
diff changeset
   218
81c73a67aac1 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24587
diff changeset
   219
!
81c73a67aac1 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24587
diff changeset
   220
24575
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   221
size
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   222
    ^ dimensions inject:1 into:[:szSoFar :thisDim | szSoFar * thisDim].
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   223
! !
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   224
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   225
!MatrixAccessor methodsFor:'private-initialization'!
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   226
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   227
collection:arrayArg dimensions:dimensionsArg
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   228
    array := arrayArg.
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   229
    dimensions := dimensionsArg.
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   230
! !
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   231
24590
ff4bec55dc15 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24589
diff changeset
   232
!MatrixAccessor methodsFor:'queries'!
ff4bec55dc15 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24589
diff changeset
   233
ff4bec55dc15 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24589
diff changeset
   234
isSquare
ff4bec55dc15 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24589
diff changeset
   235
    ^ dimensions size == 2
ff4bec55dc15 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24589
diff changeset
   236
    and:[(dimensions at:1) == (dimensions at:2)]
ff4bec55dc15 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24589
diff changeset
   237
! !
ff4bec55dc15 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24589
diff changeset
   238
24575
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   239
!MatrixAccessor class methodsFor:'documentation'!
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   240
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   241
version_CVS
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   242
    ^ '$Header$'
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   243
! !
23c9b73d0a4f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   244