can you call C++ methods from Smalltalk

This commit is contained in:
tildearrow 2022-06-24 13:17:43 -05:00
parent e39a923b23
commit 3366099dbe

View file

@ -22,32 +22,26 @@ static NSArray *BuildAllowedFileTypes( const std::vector<std::string>& filterLis
// NSMutableArray *buildFilterList = NSMutableArray::alloc()->init(); // NSMutableArray *buildFilterList = NSMutableArray::alloc()->init();
NSMutableArray *buildFilterList = [[NSMutableArray alloc] init]; NSMutableArray *buildFilterList = [[NSMutableArray alloc] init];
char typebuf[NFD_MAX_STRLEN] = {0}; String typebuf;
for (std::string& i: filterList) {
size_t filterListLen = strlen(filterList); typebuf="";
char *p_typebuf = typebuf; for (char& j: i) {
for ( size_t i = 0; i < filterListLen+1; ++i ) if (j==' ' || j==',' || j ==';') {
{ // or this: NSString::stringWithUTF8String(typebuf);
if ( filterList[i] == ',' || filterList[i] == ';' || filterList[i] == '\0' ) // buildFilterList->addObject(thisType);
{ // really? did you have to make this mess?!
if (filterList[i] != '\0') NSString *thisType = [NSString stringWithUTF8String: [typebuf c_str]];
++p_typebuf; [buildFilterList addObject:thisType];
*p_typebuf = '\0'; typebuf="";
} else if (j!='.' && j!='*') {
// or this: NSString::stringWithUTF8String(typebuf); typebuf+=j;
// buildFilterList->addObject(thisType);
// really? did you have to make this mess?!
NSString *thisType = [NSString stringWithUTF8String: typebuf];
[buildFilterList addObject:thisType];
p_typebuf = typebuf;
*p_typebuf = '\0';
}
else
{
*p_typebuf = filterList[i];
++p_typebuf;
} }
}
if (!typebuf.empty()) {
// I don't think this will work, but come on...
NSString *thisType = [NSString stringWithUTF8String: [typebuf c_str]];
[buildFilterList addObject:thisType];
}
} }
NSArray *returnArray = [NSArray arrayWithArray:buildFilterList]; NSArray *returnArray = [NSArray arrayWithArray:buildFilterList];
@ -58,7 +52,7 @@ static NSArray *BuildAllowedFileTypes( const std::vector<std::string>& filterLis
static void AddFilterListToDialog( NSSavePanel *dialog, const std::vector<std::string>& filterList ) static void AddFilterListToDialog( NSSavePanel *dialog, const std::vector<std::string>& filterList )
{ {
if ( !filterList || strlen(filterList) == 0 ) if ( filterList.size()&1 )
return; return;
NSArray *allowedFileTypes = BuildAllowedFileTypes( filterList ); NSArray *allowedFileTypes = BuildAllowedFileTypes( filterList );