function model = mttEmbedInterfaceDefinition(model,object_name,root)
if nargin==2
root = model ;
end
here = [mttDetachText(model.source,'/'),'/',object_name] ;
object = getfield(model,'obj',object_name) ;
cr = root.cr(object.cr) ;
cr_item_name = object.cr_item ;
cr_item_names = mttGetFieldNames(cr,'item') ;
mttAssert(ismember(cr_item_name,cr_item_names),...
['CR "',cr_item_name,'" not found']) ;
cr_item = getfield(cr,'item',cr_item_name) ;
cr_portnames = mttGetFieldNames(cr_item.interface,'port') ;
for i = 1:mttGetFieldLength(object,'interface')
interface_name = object.interface(i).name ;
mttAssert(ismember(interface_name,cr_portnames),...
['Unrecognised interface "',interface_name,'" in object ',here]) ;
interface = getfield(cr_item,'interface','port',interface_name) ;
interface.in = object.interface(i).in ;
interface.out = object.interface(i).out ;
has_inbond = ~isempty(object.interface(i).in) ;
has_outbond = ~isempty(object.interface(i).out) ;
mttAssert(xor(has_inbond,has_outbond),...
['Mismatched interface "',interface_name,'" in object ',here]) ;
cr_item = setfield(cr_item,'interface','port',interface_name,interface) ;
end
for i = 1:length(cr_portnames)
port_name = cr_portnames{i} ;
cr_item_port = getfield(cr_item,'interface','port',port_name) ;
mttAssert(isfield(cr_item_port,'in')|isfield(cr_item_port,'out'),...
['Unmatched port ',here,':',port_name]) ;
end
object.sympar = cr_item.sympar ;
object.sympar_default = cr_item.sympar_default ;
cr_item = mttDeleteField(cr_item,'parameter') ;
object.cr = cr_item ;
declarations = length(object.sympar) ;
values = length(object.parameter) ;
mttAssert(declarations==values,...
['Mismatched parameters in object ',here]) ;
object = mttDeleteField(object,'cr_item') ;
model = setfield(model,'obj',object_name,object) ;