[422372]: / functions / @mmo / binaryopp.m

Download this file

34 lines (30 with data), 1.2 kB

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