diff m-toolbox/classes/+utils/@xml/attachNumberToDom.m @ 0:f0afece42f48

Import.
author Daniele Nicolodi <nicolodi@science.unitn.it>
date Wed, 23 Nov 2011 19:22:13 +0100
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/m-toolbox/classes/+utils/@xml/attachNumberToDom.m	Wed Nov 23 19:22:13 2011 +0100
@@ -0,0 +1,92 @@
+
+function attachNumberToDom(number, dom, parent)
+  
+  % Store the original shape
+  parent.setAttribute('shape', sprintf('%dx%d', size(number)));
+  parent.setAttribute('type', class(number));
+  
+  if isempty(number)
+    
+    %%%%% Nothing to do
+    % For example: <parent shape="8x0"/>
+    
+  elseif numel(number) == 1
+    
+    %%%%% Single number
+    % For example: <parent shape="1x1">1</parent>
+    %              <parent shape="1x1">1+3i</parent>
+    if isreal(number)
+      numberStr = sprintf('%.17g', number);
+    else
+      numberStr = ['[', num2str(number, 20), ']'];
+    end
+    content = dom.createTextNode(numberStr);
+    parent.appendChild(content);
+    
+  elseif isvector(number) && ...
+      isreal(number)      && ...
+      numel(number) <= utils.xml.MAX_DOUBLE_IN_ROW
+    
+    %%%%% Real vector which is not longer than 50000 values
+    % For example: <parent shape="1x10">1 2 3 4 5 6 7 8 9 0</parent>
+    content = dom.createTextNode(strtrim(utils.xml.num2str(number)));
+    parent.appendChild(content);
+    
+  elseif isvector(number) && ...
+      ~isreal(number)     && ...
+      numel(number) <= utils.xml.MAX_IMAG_IN_ROW
+    
+    %%%%% imaginary vector which is not longer than 1000 values
+    % For example: <parent shape="1x10">[1+1i 2+1i 3 4-4i ...]</parent>
+    content = dom.createTextNode(strtrim(utils.xml.mat2str(number)));
+    parent.appendChild(content);
+    
+  elseif (size(number,1) > 1) && ...
+      (size(number,2) > 1)    && ...
+      isreal(number) && numel(number) <= utils.xml.MAX_NUM_IN_MATRIX
+    
+    %%%%% Real matrix which have not more than 2500 values
+    % For example: <parent shape="2x3">[1 2 3; 4 5 6]</parent>
+    content = dom.createTextNode(strtrim(utils.xml.mat2str(number)));
+    parent.appendChild(content);
+    
+  elseif isvector(number)
+    
+    %%%%% General vector
+    % For example: <parent>
+    %                <realData type="vector">
+    %                  <vector> 1  2  3  4  5  6  7  8  9 10 ...</vector>
+    %                  <vector>11 12 13 14 15 16 17 18 19 20 ...</vector>
+    %                </realData>
+    %                <imagData type="vector">
+    %                  <vector> 1  2  3  4  5  6  7  8  9 10 ...</vector>
+    %                  <vector>11 12 13 14 15 16 17 18 19 20 ...</vector>
+    %                </imagData>
+    %              </parent>
+    utils.xml.attachVectorToDom(number, dom, parent);
+    
+  elseif (size(number,1) > 1) && (size(number,2) > 1)
+    
+    %%%%% General matrix
+    % For example: <parent>
+    %                <realData type="matrix">
+    %                  <matrix> 1  2  3  4  5  6  7  8  9 10 ...</matrix>
+    %                  <matrix>11 12 13 14 15 16 17 18 19 20 ...</matrix>
+    %                     ...
+    %                </realData>
+    %                <imagData type="matrix">
+    %                  <matrix> 1  2  3  4  5  6  7  8  9 10 ...</matrix>
+    %                  <matrix>11 12 13 14 15 16 17 18 19 20 ...</matrix>
+    %                     ...
+    %                </imagData>
+    %              </parent>
+    utils.xml.attachMatrixToDom(number, dom, parent);
+    
+  else
+    
+    error('### Should not happen. Size of the input object %dx%d', size(number))
+    
+  end
+  
+end
+