version 2.39.0

PIString works with PIConstChars
picodeinfo optimizations
PIIODevice::availableClasses
This commit is contained in:
2022-05-03 18:44:00 +03:00
parent 8d5730f715
commit 28ce6e8f3f
9 changed files with 106 additions and 55 deletions

View File

@@ -266,11 +266,9 @@ void PIIODevice::write_func() {
PIIODevice * PIIODevice::newDeviceByPrefix(const char * prefix) {
if (!prefix) return nullptr;
PIConstChars p(prefix);
for (const auto & i: fabrics()) {
if (i.first == p)
return i.second();
}
auto fi = fabrics().value(prefix);
if (fi.fabricator)
return fi.fabricator();
return nullptr;
}
@@ -488,17 +486,30 @@ void PIIODevice::splitFullPath(PIString fpwm, PIString * full_path, DeviceMode *
PIStringList PIIODevice::availablePrefixes() {
PIStringList ret;
for (const auto & i: fabrics())
ret << i.first.toString();
ret << i.second.prefix.toString();
return ret;
}
void PIIODevice::registerDevice(const char * prefix, PIIODevice * (*fabric)()) {
PIStringList PIIODevice::availableClasses() {
PIStringList ret;
for (const auto & i: fabrics())
ret << i.second.classname.toString();
return ret;
}
void PIIODevice::registerDevice(const char * prefix, const char * classname, PIIODevice * (*fabric)()) {
PIConstChars p(prefix);
if (p.isEmpty()) return;
//printf("registerDevice %s %d %d\n", prefix, p.isEmpty(), fabrics().size());
if (!fabrics().contains(p))
fabrics()[p] = fabric;
if (!fabrics().contains(p)) {
FabricInfo fi;
fi.prefix = prefix;
fi.classname = classname;
fi.fabricator = fabric;
fabrics()[p] = fi;
}
}
@@ -555,8 +566,8 @@ void PIIODevice::cacheFullPath(const PIString & full_path, const PIIODevice * d)
}
PIMap<PIConstChars, PIIODevice * (*)()> & PIIODevice::fabrics() {
static PIMap<PIConstChars, PIIODevice * (*)()> ret;
PIMap<PIConstChars, PIIODevice::FabricInfo> & PIIODevice::fabrics() {
static PIMap<PIConstChars, FabricInfo> ret;
return ret;
}