Switch to unified view

a b/functions/@mmo/binaryopp.m
1
function obj3 = binaryopp(f, obj1, obj2)
2
3
    if isa(obj2, 'mmo'), tmpobj = obj2; obj2 = obj1; obj1 = tmpobj; clear tmpobj; end
4
    if ~isequal(size(obj1), size(obj2)) && prod(size(obj2)) ~= 1
5
        error('Matrix dimensions must agree.');
6
    end
7
    data1 = memmapfile(obj1.dataFile, 'writable', obj1.writable, 'format', { 'single' obj1.dimensions 'x' });
8
    if isa(obj2, 'mmo'), 
9
         data2 = memmapfile(obj2.dataFile, 'writable', obj2.writable, 'format', { 'single' obj2.dimensions 'x' });
10
    else data2 = obj2;
11
    end
12
13
    % make new memory mapped data file (blank)
14
    % --------------------------------
15
    newFileName = mmo.getnewfilename;
16
    fid = fopen(newFileName, 'w');
17
    s1  = size(obj1);
18
    ss.type = '()';
19
    ss.subs(1:length(s1)-1) = { ':' };
20
    for index = 1:s1(end)
21
        ss.subs{length(s1)} = index;
22
        if prod(size(data2)) == 1
23
             tmpdata = f(subsref(data1.Data.x, ss), data2);
24
        else tmpdata = f(subsref(data1.Data.x, ss), subsref(data2.Data.x, ss));
25
        end
26
        fwrite(fid, tmpdata, 'float');
27
    end
28
    fclose(fid);    
29
    
30
    % create object
31
    % -------------
32
    obj3 = mmo(newFileName, s1, true, obj1.transposed);
33
    obj3 = updateWorkspace(obj3);