changeset 9616:322014d4cabe octave-forge

quaternion_oo: enable subsref stuff like q(1:2,2).w(2)
author paramaniac
date Fri, 09 Mar 2012 16:13:10 +0000
parents c380f8b12117
children 304af0bcac9f
files extra/quaternion_oo/inst/@quaternion/subsref.m
diffstat 1 files changed, 13 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/extra/quaternion_oo/inst/@quaternion/subsref.m	Fri Mar 09 11:51:33 2012 +0000
+++ b/extra/quaternion_oo/inst/@quaternion/subsref.m	Fri Mar 09 16:13:10 2012 +0000
@@ -1,4 +1,4 @@
-## Copyright (C) 2010, 2011   Lukas F. Reichlin
+## Copyright (C) 2010, 2011, 2012   Lukas F. Reichlin
 ##
 ## This program is free software: you can redistribute it and/or modify
 ## it under the terms of the GNU General Public License as published by
@@ -18,10 +18,15 @@
 
 ## Author: Lukas Reichlin <lukas.reichlin@gmail.com>
 ## Created: May 2010
-## Version: 0.3
+## Version: 0.4
 
 function ret = subsref (q, s)
 
+  if (numel (s) == 0)
+    ret = q;
+    return;
+  endif
+
   switch (s(1).type)
     case "."                                # q.w
       switch (tolower (s(1).subs))
@@ -41,11 +46,12 @@
       endswitch
 
     case "()"                               # q(...)
-      w = subsref (q.w, s);
-      x = subsref (q.x, s);
-      y = subsref (q.y, s);
-      z = subsref (q.z, s);
-      ret = quaternion (w, x, y, z);
+      w = subsref (q.w, s(1));
+      x = subsref (q.x, s(1));
+      y = subsref (q.y, s(1));
+      z = subsref (q.z, s(1));
+      tmp = quaternion (w, x, y, z);
+      ret = subsref (tmp, s(2:end));
       
     otherwise
       error ("quaternion: invalid subscript type '%s'", s(1).type);