From octave-sources-request at bevo dot che dot wisc dot edu Sun Nov 5 10:57:06 2000 Subject: cell array patch From: Paul Kienzle To: octave-sources at bevo dot che dot wisc dot edu Date: Sun, 5 Nov 2000 16:56:37 +0000 --dDRMvlgZJXvWKvBx Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Hi all, I've increased support for cell arrays in octave 2.1.31. Now you can assign to, extend and delete from cell arrays. Assignments must be from cell arrays, which means you must wrap an octave value in {} before assigning. For dereferencing, I've overloaded the nth function from the list type. Both cell arrays and lists should use the {} dereferencing operator. Support for this will be non-trivial. The parser must be extended to distinguish {} indexing from [] indexing which is easy enough, but then every context in which they are interpreted must be extended to accept multi-valued rvalues. This is done already in function calls with all_va_args (see pt-arg-list.cc), but this must be extended to all other contexts which make sense with a dereferenced list. Dereferencing can also be used for lvalues in Matlab. In this case, you do not have wrap the value in {} before assigning, but you need to use {} as the indexing operator. This will require even more work to support. While implementing assignment, I noticed that =[] is an operator in Matlab. That is, "x(i)=[];" deletes the ith element of x, but "y=[]; x(i)=y;" gives a non-conformant arguments error. Putting deletion in the parse.y and separating assignment from deletion would make the code in liboctave somewhat cleaner, and fix a hack that I needed to implement cell array deletion. Summary of changes: Array.h, Array.cc, Array2.cc, Array-s.cc, Array-i.cc, Array-d.cc, Array-ch.cc, Array-C.cc, Array-b.cc When you extend cell arrays by assignment, the missing values must be filled with [] rather than 0. I invented a template function T& assign_fill_element(Array&) which returns a constant with which to fill the missing array elements. The template defaults to T(0), but you can override the template with your own function but not instantiating the assign_fill_element function for your type. Cell.h Cell.cc Cells now inherit directly from Array2. ov.cc Register octave_cell ov-list.cc Extend nth to dereference cell arrays as well as lists op-cell.cc Copied from op-m-m.cc, then trimmed heavily ov-cell.cc, ov-cell.h Use 'matrix' rather than 'cell_val' so that the code looks more like the matrix code (and hopefully easier to support). Use matrix assignment code more or less directly. parse.y Treat the empty cell array as an empty cell array rather than an empty matrix. NOTES: copy OPERATORS/op-m-m.cc to OPERATORS/op-cell.cc before applying patch the patch will probably not apply without displacements since I did the changes on top of other patches I submitted recently. Enjoy! Paul Kienzle pkienzle at kienzle dot powernet dot co dot uk --dDRMvlgZJXvWKvBx Content-Type: application/octet-stream Content-Disposition: attachment; filename="cell.patch.gz" Content-Transfer-Encoding: base64 H4sICJiLBToAA2NlbGwucGF0Y2gA1TxrV9tIsp/hVzTMDLFBJpYfgOWQLEPIbs7J6yTsbO6Z masjZIHFyhIjyTwu4f72req3pJZsQ2bvXSYDdquqVF2vrqpuaXt7m2Sp//w4iKJd31/rdbvd 53b3eXdI7J7T7zm2vWbv2uudTscIZ48Qrjtwugfr28Uf8iU5z2+8NCBvknk88fIwiS0yHJHT YHYVBeRT5PkB6ZAviEj6XWswIoi3Tgj8+yGM/Wg+CcgmveV0E4c7JPFz7zpwvShKfC9PUhjC 644jR0grC/8nSM5JCy+022NE3KBQ/I/jhPEkuCWtcHLrXgc+IG2RsE38JM5ygLmH/wlJg3ye xhSBtIB7b1dgIc0N8rAkXYvoXy/FbcjC21gATLl/YBJ5jpIZj8fkHUw0Ir94aeidRUHmoNSo gkCGwz0CnzoNMqRcqytHaerd4aXqoO/jKPzLUWFeHhA/8rKM0KsvuCauvWgevByXAMM4JwAa XsSkZQDfspgUTKS2hMZK7PSMTPYUlzqVLX539zyMIjeIglkQ50ZOSDTN2kSqI8vBTv0CLXKe JK33Xp6Gt62u1WXa13UH18eE6mmHwD+TtHplcRUhK+LqNcmrfJEJbJGBbHNPT66X8XMdyn7e HZBeH1zc6e1VvDwEvsD53PzuKshI6zoJJ216M3vY37fs4aDHvBopw9AQh2xhpERIOsvTuZ87 ThpchFkepJQcadGpSSBQZrAAJIJLJpAdBeJTV22kgvO59lwvvcgWQM68i9B3/SRK4gWQZ/Mw ykMjlFJNx18yDhtAe33SHTl21+ntPzEU71mgIak0/NoTClPuNwnO5zGLKWowSNMkLQ8KXmF4 pzicBp2Zl1fg/byTnF2Wh+fxDYTGzlWaVDDmeRhlOFied0Hlk8SlsdVNrkiL+ZNwJDrv4YG1 NxBL0JqK2iQkhxjESavbZtFZXGAq1kEvBahtBIWwsQZRAxwX4JAr9OFCxGc2gz8P8tNZGnj/ pOioj+HI2hsKffwb2GRL04wGwOriVM/rk3Sxt2ft7wtdsJ/71abbLOoFvLPvYOLePMqdIgtZ PnEciFdhfEFioI1u7MbeTHg8wlA/IK3NMIabhhMSz2dnQUogKwEGQh8D5U+TNqwcKfkpIzSO b1pUu3v71v5IhcenTtyovEWaq539DvlzBfAkkznoW7bdVTbDV2cmCi2PwhVKpQuMtlh8i2SR K7qibKG8xRpczDNSSB949vBDeE66NDGAD5gE7kZBfJFPQSzk8JDY7XUhxw0uUVz3uTaZMnOe crRgOQyENjks0NwgVK4uZilBGxWNtNYYIVRFlOXqpsIYOD/kJemSrS3S+iUNMEV2k9hNvfgi cJmyvn0DXl4ckrjdZlgEybXCjg3s4zzHbDiIskAACDWjkAgzr0Py04Qk8xx1TclvQgZMc6a1 BzkZQcOAP5vDx7OAeDHOKrgI0k1prsxYOXL5/hmZeXckiaM7RKfEggk5uyMeycBUYZnLIC3y OLkfArDDc2EV6HkHkJoMNNcz288OVfMGOEcYA/nW8dev7oeTf7hvPr89+fDaPT15/+nd0emJ +/rk+F0boINbWOpjanRPS/F2BMs738OIMS4UjJfZENgOM0fdivCiSHmzmzD3YRgul83Z97KA 9BypY2qay4atjVWXJx7SsiB3tZhuvHApMvY1JSMGZVEJjCXLykBVMNQmZz96ck0cP4qxDcGY jNLStZaPvMJH0Hy4cWKdBIGYuzfag+Z8O6LEgX/UAHe+axTdoSsM1DHPydevX8mbt1/J+xP8 KEbfAM9+MruC/PUsjML8ziJxAPznCQ0YUOvgxwmUe1h9AUsZdX/KFUQAQSafBjNyniYz8uvv u4ScTsOM3ECdSKbAEYm9LL+joSf1fEyU8SJ4gjfPE0EBpnAdpBlchBvnNwF4DZsPW8kyCF4T 6mIt27LbFsmAqyR+lsNvEua7gszpNCCQzl6BerIkmuPNCPACc5h5/4QJwexuyFWS5efhLUEw 2t84/PV3i9xMQ3BDQWgWeMAmnzhMT2qWV76ZnCblgtpQUZKCEkRKqAQ27+AmY3KLi1j78G68 SS7Cazotbl5hTKAijrwzi5xBqA9zjL2CBiOfJZAQBLegd8wTuHj8ZBLs8hhqU3hcmkD7u2Hm AlrkMvuHFXOLWsVumtxkbP3siiGotuazWIy2KRnC1dyiJkZFD7W6hXbFDdiwaszBp++vH1Dg 3HSv6WdqO5vU/X6QaBX6oFpFv7icNOYxVymu86l3Q1o0kwL9wsxnWyTJWN1sjyy7tycSmXvK PSt+XCx+AqyTz6CIjN3zlGZdmxp9l5LfVLkDTQ1SPQdGkcrATi/7+mUpXpkLoo6ABM8fAPol il0EQlbYH1i2qkq+G888Zpo55hdX5fdpyunDRAeqSuRBeX5OXrwgm79u4p9wx6bfLPrtkn/7 nX6jRMFWsrHCZgHRn3op2Y5nMDEgtwv3LaRw+FPoShULG6jILmXyzaBRl2w6GL94gp5kEDNn bVlM2vv7ln3Ql+Xk//V8uPs/YjZaEwUXmyWbKGXQXh/8zwHowVP72fuW3vnCr/1qE6WuX0LZ au5/6K2UQnv39cmbtx9O3I/Hp0e/nLhH7959PD46/fgZpKVaZFJkhQkC5t8/gOvkU4tg78si FjP6IRjJSCutNjvbHZJDcI/PEwKff4t/g/G/QC6CteB5TO5/xm5XB5aJN/OYrqIP5P6BxJhR /uXaS++RiQeL0M/xQ5sR+MwyblzA+IUOIPA1DDMYhbrLbwmmR+RtN9sy9hRMS6TwPGnC8IDT K5ZnPRUheCZVzWCwIAIjRWRM9HBIFGwslROYhmKNVIo1SsY2lX0bWt1Wrflk/qnuFctghxVc oQqkKKohgCVdDCXdWBEQxZisxkBNTkM1FyvkB+agppKQEskCCAYTnOmc6rCuuFtTbYhyaUjp nIcpIFbJEFRBQ33IIsY88y4CRmpT6clc34nVrNfXSsH/J/a+o93ydvE9cW0Q9wzFh0t2853K zSHkGm9PqTzS3XiH47BjW5fwS5aSFR8EF3xBeqrZ8e0bu0zLqYz6HksJizgv0Ws1nPLVvriq Wi41FsF+SiaxwY1Kcb3Aa9m8NH/lTRXs/ZQZWc5PMP0Pc0i+dX9Zmt2KkCHO9dukwsulmFev bl7EPLdLMTcR2wqzyqdhusKk1gwzkj0jw7Q046Bx7snhm/0sGcRpS80YbLlqVLwNabxtjpTN zbPFEZLOj02GjjcERaV32h2m1b+Sisgoy1JZvg8pig1eu421S6LQ0JN2elUJ9RKNFHuOQkw8 m2cd1MKqx9qVfmmF81nxFz5tkQsVMqIyLvx6LlITF8CD1f2OXGiECtGDtTcZmTihdhBOaIun 13nN2zvYVpR+JqfEmcfQeqlJs2DCcirkUsl0CUO2DPNhW1yNveDFCz7BPpAs0ZWNm1f0bf2I y3S5Ey4a2IjYXcfec7rVre9VD7iMeiKFlqn7C7aP8nK9dGBDHXnolHZG6UGX8gWg0rkOfFkD 6MUEH9xg5xHW+ZEVFiiv5mdR6Dui7ma7RWwLnwnWIXgmBVPke7F/IsCoQ1vUr2fmrh4zn0Ju wEKkThlIADpclbdQnDR0xIlfJuTXEmDN7irCLv5lWLw0oG36bdlqw/4bPU7k5gT/yFVcmJo8 dbRLPzHg9rhEUNLjHboWu82VRYy0FdHzNABoDkfJahrY0lqClZmKtVCP2jl2ADcOyRbzcSoE 8G4qhUL1wie3jQj6KiIzOtaPoXbCFS8lQo8wiX6NkgNi8ZjfhChBdNyiUclJg01SGwyZDV62 FS3MYcV+uplOE5kSY4uJbQkYMzd0ZkuwZCJiEpKZFDX4hoNt44WA5pNqHA/y5mtY7GWoKB6U Uqfv5CfWYgJIk/sSZnNgVrzLw/un/BSb6iSuECgXBD42b4eHPCNXC4MioBtn86eER/OdFodL EQNqSdQHyrpIuwSpR0UlE1HHKRDQjio0hiV2jzDOgjRvno7HlJKyP3xVEDyZORJkARXQfJl2 FDnaKPNDcsh7Mih2gpqYZ76bhqVifslRtktHxhbnNVVIdna3d+D0u5XURvgAfh7uWXt7qvmn 9ctFrkC4yYqjbl6mDFq3tQJqzdpsomHJPnfZeg0UtaHVCMvSp2DU/1udr7hMT2NR4ZSPM35X 4cwWzYE1zUlrtpJolie7yz4tK5YmW9o7sA662jHv0hLYcManuI2sNnsKJyset/MsaZ0lCSyN mStPdxi9FtsiWi4mkCiUByFlIZaMD3qtbUQSANrt6HxpF6u6RWUxZq5S16PbqRM3u4tzD8ux cw/KLLmkc+MFbYwG2oHxp2ljZ3F2WNrPo+cJlkkOi1t9ElViiwaMhkyv3fPNYcoWnmISG4lq mLYkFF1BVQb3Vso2n799Iz7bcCav4KtDWi3cYvTxawpffU5V8rWyYaozOeP/ZMuWWFpkqMHY WMUXmA38CZ7QFK8OBtZIj1flNLjAupQ2Hv46+lzdgxN+Nzqw7K7ueEayfMLLEBXpwJWXZsHu XTkZ6Dv9YjJQhuvt0VSg63R7T+tyDLrWYKi2PfGr8YkUTOeZtnanL9f5ubrqdqYaYw9glEf9 2aQTTMLKXimOT/keank+TKwuhgJ7zWHKS1JXDbOFqtu39mxbbvSvcT0g+BqgPbt/Rp49PKPN PCzaf/wRTAv7BTCpQPOYYnr/ni+p7TbP7NbWvjFS4+9Kjk6KBjskSnSi4P9hNuXe+WNPIo7Z imBD9WUfyPMA32farMb4TpOuIfaoKQu/+fjp5DP60pfnyVXlwQq7i84xGDjDYcGJGpHYQYLh AaThT+4b2n3b+GTcRRpeBVn1+ED5San6Jy2uO7iVh9ualUtXWbnJeDsJrytjV8mNLL7xJBqz yHnspXcEabCIRk8WfPzkfvwEFWySi9zSIhvt0tX5LIznmQLotNkqwWFwU4pXRwJGnWA9Pvpy 6lJKR5//WloyGax8uEwu70XbuuapLvveau/qtZh6GI+y8+GY3ur9yenfPr7Get9PFdv4je6j to3Ak0AHxm8SGP4pOZ7diU9UlkISP78V4vImE0VH/N1pl8Gy+VkVrFMBm82jKth2u3hf4D68 LoOVlMBIgha+mNVQyliUcopP1qHFgVLsglZobXLdK48p7XQkq19JC+yzymsHj60RtXHhe/xw 5hH5b/Iz3Tg5omc4f4Y0AvJKiucHGW44dOpsh157gP81Btw3H0grMsjLIrdRcJ7DlbYJI6/C z27dIHKjvF0BDmqBgwpw8EcdcPBHBfiilvJFlfJFLc8XVZ7jWspxYBIIXDDa5lWaTOZ+lT7A G4X+xzzJQ+poVQSDpVi0J+tikCtxRTFMilXG9TRH6JB6SxOzANeouAG4RsVd2rWmCZMAM6/T BVwyCSpJ6xCSVInp6MuXt38VWKyKqaKxcYokn2kQD5TO4D+IeqqNwuLL2w9fTiH3ddlqkFy5 dD0pyM/CTVDepKuAiwWmhMGG65C0RaeEJ6/UoU6DdBbmoRcvQC1gs+WC4rN1pYSKg6Ubaihs dSmh4GD1RtyYAYmuJCWc0lcAKd1UodMVphkdQGrRqXc3owNILTp1xGZ0DLV16NT1m9ExBNSh R0vcPmq6f1S14DJ62Z415KpRlpHLxqmQcT1oRoZ1oQ75YuGdL+rvfLFwzhf1c44X3jlumHO0 jLkxqCYiS2idQTURWcL0GFQTkWUMkIM1kaFLwUIquCo0EEmqoadKI0lVIi6oiAWDRaMsXsI2 +fJRfEmG2EM0vwljhZrJN7QhFldMy1VChToGb7RcFUM79wtrGNVKa65gjEs0IovfYnnWoI8+ /FcBwYvvStBoG8cfP/yC/SpIwCkz+MCUmiFnGyt9bV4tXY+lXIA1aZZIBqoLNePtEcu0CXFp g2XIhS+aeMo0qFDryUhJ1zkNilu2SdQuTj03JS7+8fb1CZvIAhJKmUWfw0ZFFJ4x2Od0W7Nz VnoEozuijcie7KE0IuDmpO0M957+IIZt9fe0BzHg674WGYzvtsHe8Uu+pyEBcLDpvTIUiTln w3twGFTx/Tca5rr5bINJvseryvfYIN+BM3hix7fft/oHmnzh62iRfI8TJHRbETEfb5KyQF0o aAlYlPVT8SfJ/CwKHo0OgBTXpFB/uqpGixhSpcPqfv6f7jL4uFdFnzjYpEyKtFCUDKooRw1z BZeZrCrgiUG+Q6f3VJd5hHy53ZUlzIabZLyswQq4x5m7GVtY+yNQs2mS1rtKuKoiQ6Oj9J/a m3+EIlEmZS3CWJMKlxIjBXqE+A14SvarYkq3NCktW1VpmUFp+05/9O9XGpNIWW10tElxSwqS gz1KCUZcPToaNNHr4Bs+pqvoooxiH+Ab4XojyNAq2uCn2k5fOs7MuzsLXHbsWcgmE8dOKWuD g31rMOprD1TTg5PBjcsfAKdbsi6+W+MlvqsPh18Vhh0+PCa/lQj4nICfRDoBnxMQw5yAzwjA L/pYQ4QvH6AvysF2NbJjcaoW6e522/x2DwwJD37wTzfTEGyu1W2zHfDRvjXs6g9Y/wfMz2TR EX3VweJJG+xtNVOrWJk9cgbDipXppzR6w67VG2rnDtiAzEPV2xnKLvyCefnpSxg83YJfhqkL Vzvlb4scs1fwlGm8O7V4zPh8ikcaQE3rpOSt7ziNort+xlF2XMe42K3qrEZfBSkaljsxswWu 6lPG7P2eZYvXsrG3B8DAwVB/XdnDunxRUo2QG+KlkDC+CoYdouLHzE/pSzi76niW9upN8Voa 2nV59eoVvjjm/Qn9BCzShx4mSZDRB6OmXjwBO1XvusGHk4DN/I6wc+8ZI6NeI6O9QeXLNJlH ExLmr9YNp4aWVTST5GjP6nXl40Br98qz0XPRaw+p16ImYQSPiu4Qmz9EiA9zCDDm8/R1TOKl XZpjcygesdb5Y4RcVfLlKy597RO++Ys5T3dg9eyuDFl/OnP14WYJjv8F0nlQesJYAAA= --dDRMvlgZJXvWKvBx-- ------------------------------------------------------------- Octave is freely available under the terms of the GNU GPL. Octave's home on the web: http://www.octave.org How to fund new projects: http://www.octave.org/funding.html Subscription information: http://www.octave.org/archive.html -------------------------------------------------------------