classdef SCDclass_expcodecontainer % A container class for expcodes properties(Access = private) numexpcodes expcodes end methods function obj=SCDclass_expcodecontainer() obj.numexpcodes=0; obj.expcodes={}; end function obj=insertexpcode(obj, maincode, definefunction) if(obj.numexpcodes==0) temp=cell(10,1); temp{1}=maincode; temp{2}=definefunction; obj.expcodes{end+1}=temp; obj.numexpcodes=obj.numexpcodes+1; fprintf('Expcode %d inserted (pos %d)\n', maincode, 1); else expcodepresent=false; expcodeindex=0; for(ii=1:numel(obj.expcodes)) if(obj.expcodes{ii}{1}==maincode || strcmp(char(obj.expcodes{ii}{2}),definefunction)) expcodepresent=true; expcodeindex=ii; break; end end if(expcodepresent) obj.expcodes{expcodeindex}=expcode; fprintf('Expcode %d already present (pos %d), skipped insertion.\n', maincode, expcodeindex); else temp=cell(10,1); temp{1}=maincode; temp{2}=definefunction; presentcodes=[]; for(ii=1:obj.numexpcodes) presentcodes(ii)=obj.expcodes{ii}{1}; end insertpos=max(find(maincode>presentcodes)); if(insertpos==obj.numexpcodes) obj.expcodes{end+1}=temp; fprintf('Expcode %d inserted (pos %d)\n', maincode, obj.numexpcodes+1); else for(jj=obj.numexpcodes:-1:insertpos) obj.expcodes{jj+1}=obj.expcodes{jj}; end obj.expcodes{insertpos}=temp; fprintf('Expcode %d inserted (pos %d)\n', expcode.maincode, insertpos); end obj.numexpcodes=obj.numexpcodes+1; end end end function printexpcodes(obj) if(obj.numexpcodes==0) disp('No configured expcodes.'); else fprintf('------------------------------------------------------------------\n'); fprintf('CODE\tSTATUS\tNAME\n'); fprintf('------------------------------------------------------------------\n'); for ii=1:obj.numexpcodes try expcode=obj.expcodes{ii}{2}(); if(~isa(expcode,'SCDclass_expcode')) error('SCDclass_expcodecontainer.getbymaincode','Expcode defining function not returning the right object'); end fprintf('%d\t%s\t%s\n',obj.expcodes{ii}{1},expcode.status,expcode.name); catch ME fprintf('%d\tERROR calling conf function: %s\n', obj.expcodes{ii}{1},char(obj.expcodes{ii}{2})); end end fprintf('------------------------------------------------------------------\n'); end end function out=getbymaincode(obj,code) if(obj.numexpcodes==0) error('SCDclass_expcodecontainer.getbymaincode','Expcode container empty!'); end presentcodes=[]; for(ii=1:obj.numexpcodes) presentcodes=[presentcodes; obj.expcodes{ii}{1}]; end if(isempty(find(code==presentcodes))) error('SCDclass_expcodecontainer.getbymaincode','Expcode not present in the container class'); else deffunc = obj.expcodes{find(code==presentcodes)}{2}; %expcode = eval(char(deffunc)); expcode = deffunc(); assert(isa(expcode,'SCDclass_expcode'),'SCDclass_expcodecontainer.getbymaincode the configured defining function doesn''t return a SCDclass_expcode object'); expcode.maincode=code; out=expcode; end end end end % % function obj=insertexpcode_object(obj, expcode) % assert(isa(expcode,'SCDclass_expcode'),'SCDclass_expcodecontainer.insertexpcode only SCDclass_expcode classes accepted as input'); % % if(obj.numexpcodes==0) % obj.expcodes{end+1}=expcode; % obj.numexpcodes=obj.numexpcodes+1; % % fprintf('Expcode %d inserted (pos %d)\n', expcode.maincode, 1); % else % expcodepresent=false; % expcodeindex=0; % % for(ii=1:numel(obj.expcodes)) % if(obj.expcodes{ii}.maincode==expcode.maincode) % expcodepresent=true; % expcodeindex=ii; % break; % end % end % % if(expcodepresent) % obj.expcodes{expcodeindex}=expcode; % % fprintf('Expcode %d already present (pos %d), data updated.\n', expcode.maincode, expcodeindex); % else % % presentcodes=[]; % for(ii=1:obj.numexpcodes) % presentcodes(ii)=obj.expcodes{ii}.maincode; % end % insertpos=max(find(expcode.maincode>presentcodes)); % % if(insertpos==obj.numexpcodes) % obj.expcodes{end+1}=expcode; % % fprintf('Expcode %d inserted (pos %d)\n', expcode.maincode, obj.numexpcodes+1); % else % for(jj=obj.numexpcodes:-1:insertpos) % obj.expcodes{jj+1}=obj.expcodes{jj}; % end % obj.expcodes{insertpos}=expcode; % fprintf('Expcode %d inserted (pos %d)\n', expcode.maincode, insertpos); % end % % obj.numexpcodes=obj.numexpcodes+1; % end % % end % end