Skip to content
This repository has been archived by the owner on Mar 5, 2022. It is now read-only.

Commit

Permalink
Eliminated more code duplication with MWorksStreamUtilities. Reverted…
Browse files Browse the repository at this point in the history
… a previous change to MWMATLABWindowController's reset method.
  • Loading branch information
cstawarz committed Jul 13, 2010
1 parent cf079db commit 838a078
Show file tree
Hide file tree
Showing 2 changed files with 5 additions and 79 deletions.
72 changes: 3 additions & 69 deletions MATLABWindow/MATLABInterface.m
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,6 @@
@interface MATLABInterface (PrivateMethods)
- (Engine *)getMATLABEngine;
- (mxArray *)createTopLevelDataStructure:(NSString *)name;
- (mxArray *)createTopLevelEventStructure:(long)nevents;
- (mxArray *)createCodec:(Datum *)payload;
@end

@implementation MATLABInterface
Expand Down Expand Up @@ -94,7 +92,7 @@ - (void)resetRetval {
}

- (void)logMATLABOutput {
NSString * tStr = [NSString stringWithCString:(char *)[outputBuffer mutableBytes]];
NSString * tStr = [NSString stringWithUTF8String:(char *)[outputBuffer mutableBytes]];
[delegate appendLogText:tStr];
[outputBuffer resetBytesInRange:NSMakeRange(0, OUTPUT_BUFFER_SIZE)];
}
Expand All @@ -103,7 +101,7 @@ - (mxArray *)createDataStruct:(NSArray *)dataEventList
withCodec:(Datum *)codec {

[interfaceLock lock];
mxArray *codecStruct = [self createCodec:codec];
mxArray *codecStruct = getCodec(codec->getScarabDatum());
int nevents = [dataEventList count];

mxArray *data_struct = [self createTopLevelDataStructure:STREAM];
Expand All @@ -118,7 +116,7 @@ - (mxArray *)createDataStruct:(NSArray *)dataEventList
return 0;
}

mxArray *events = [self createTopLevelEventStructure:nevents];
mxArray *events = createTopLevelEventStruct(nevents);

mxArray *old_events = mxGetField(data_struct, 0, ml_EVENTS);
if(old_events) {
Expand Down Expand Up @@ -266,68 +264,4 @@ - (mxArray *)createTopLevelDataStructure:(NSString *)name {
return dataStruct;
}

- (mxArray *)createTopLevelEventStructure:(long)nevents {
// *****************************************************************
// Allocate storage for the number of events we are about to read
// *****************************************************************

const char *event_field_names[] = {"event_code", "time_us", "data"};
int event_nfields = 3;
mwSize event_dims = nevents;
mxArray *events = mxCreateStructArray(1, &event_dims,
event_nfields, event_field_names);

return events;
}

- (mxArray *)createCodec:(Datum *)codec {
ScarabDatum *payload = codec->getScarabDatum();

int n_codec_entries = scarab_dict_number_of_elements(payload);

ScarabDatum **keys = scarab_dict_keys(payload);
ScarabDatum **values = scarab_dict_values(payload);
const char *codec_field_names[] = {"code", "tagname",
"logging", "defaultvalue", "shortname",
"longname","editable", "nvals",
"domain", "viewable", "persistant"}; // more to come later?
int n_codec_fields = 11;
mwSize ndims = 1;
mwSize codec_size = n_codec_entries;
mxArray *codec_struct = mxCreateStructArray(ndims,
&codec_size,
n_codec_fields,
codec_field_names);


for(int c = 0; c < n_codec_entries; c++){
int code = keys[c]->data.integer;
ScarabDatum *currentEntry = values[c];


ScarabDatum **property_keys = scarab_dict_keys(currentEntry);
ScarabDatum **property_values =
scarab_dict_values(currentEntry);

mxSetField(codec_struct, c, "code",
mxCreateDoubleScalar((double)code));

for(int d = 0; d < currentEntry->data.dict->size; d++){
const char *thiskey = scarab_extract_string(property_keys[d]);

if(property_values[d] == NULL){

} else if(property_values[d]->type == SCARAB_INTEGER){
mxSetField(codec_struct, c, thiskey,
mxCreateDoubleScalar(property_values[d]->data.integer));
} else if(property_values[d]->type == SCARAB_OPAQUE){
mxSetField(codec_struct, c, thiskey,
mxCreateString(scarab_extract_string(property_values[d])));
}
}
}

return codec_struct;
}

@end
12 changes: 2 additions & 10 deletions MATLABWindow/MWMATLABWindowController.m
Original file line number Diff line number Diff line change
Expand Up @@ -445,9 +445,7 @@ - (void)reset {
// [delegate setValue:[NSNumber numberWithInt:0] forKey:[@"variables." stringByAppendingString:self.syncEventName]];


// CJS: I have no idea why the variable was set this way, but I think the replacement code
// below should be sufficient.
/*NSArray *variable_names = [delegate variableNames];
NSArray *variable_names = [delegate variableNames];
NSEnumerator *var_name_enumerator = [variable_names objectEnumerator];
NSString *var_name = nil;

Expand All @@ -457,13 +455,7 @@ - (void)reset {
[delegate updateVariableWithTag:self.syncEventName
withData:&data];
}
}*/

if ([self.syncEventName length] > 0) {
Datum data(0L);
[delegate updateVariableWithTag:self.syncEventName
withData:&data];
}
}

[mi resetRetval];
[executionList removeAllObjects];
Expand Down

0 comments on commit 838a078

Please sign in to comment.