version 2.98.0

remove PIFile::readLine()
partially migrate PIConfig to text stream
add more "override"
This commit is contained in:
2022-08-01 18:13:22 +03:00
parent 97734953dd
commit b0d48caaad
8 changed files with 127 additions and 156 deletions

View File

@@ -267,33 +267,19 @@ void PIConfig::Entry::piCoutt(PICout s, const PIString & p) const {
PIConfig::PIConfig(const PIString & path, PIIODevice::DeviceMode mode) {
_init();
own_dev = true;
dev = new PIFile(path, mode);
if (!dev->isOpened())
dev->open(path, mode);
incdirs << PIFile::fileInfo(path).dir();
parse();
open(path, mode);
}
PIConfig::PIConfig(PIString * string, PIIODevice::DeviceMode mode) {
_init();
own_dev = true;
dev = new PIIOString(string, mode);
parse();
open(string, mode);
}
PIConfig::PIConfig(PIIODevice * device, PIIODevice::DeviceMode mode) {
_init();
own_dev = false;
dev = device;
if (dev) {
dev->open(mode);
if (PIString(dev->className()) == "PIFile")
incdirs << PIFile::fileInfo(((PIFile*)dev)->path()).dir();
}
parse();
open(device, mode);
}
@@ -317,43 +303,57 @@ PIConfig::PIConfig(const PIString & path, PIStringList dirs) {
dev = 0;
return;
}
_setupDev();
parse();
}
PIConfig::~PIConfig() {
root.deleteBranch();
if (own_dev && dev) delete dev;
dev = 0;
piForeach (PIConfig * c, inc_devs)
delete c;
inc_devs.clear();
includes.clear();
_destroy();
}
bool PIConfig::open(const PIString & path, PIIODevice::DeviceMode mode) {
if (own_dev && dev) delete dev;
_destroy();
incdirs << PIFile::fileInfo(path).dir();
own_dev = true;
dev = new PIFile(path, mode);
if (!dev->isOpened())
dev->open(path, mode);
_setupDev();
parse();
return dev->isOpened();
}
bool PIConfig::open(PIString * string, PIIODevice::DeviceMode mode) {
if (own_dev && dev) delete dev;
_destroy();
own_dev = true;
dev = new PIIOString(string, mode);
_setupDev();
parse();
return true;
}
bool PIConfig::open(PIIODevice * device, PIIODevice::DeviceMode mode) {
_destroy();
own_dev = false;
dev = device;
if (dev) {
dev->open(mode);
if (dev->isTypeOf<PIFile>())
incdirs << PIFile::fileInfo(((PIFile*)dev)->path()).dir();
}
_setupDev();
parse();
if (device) return device->isOpened();
return false;
}
void PIConfig::_init() {
internal = false;
delim = PIStringAscii(".");
root.delim = delim;
empty.delim = delim;
@@ -361,6 +361,26 @@ void PIConfig::_init() {
}
void PIConfig::_destroy() {
if (stream) {
delete stream;
stream = nullptr;
}
if (own_dev && dev) delete dev;
dev = nullptr;
piForeach (PIConfig * c, inc_devs)
delete c;
inc_devs.clear();
}
void PIConfig::_setupDev() {
if (!dev) return;
stream = new PIIOTextStream(dev);
stream->setEncoding(PIIOTextStream::UTF8);
}
void PIConfig::_clearDev() {
if (!dev) return;
if (PIString(dev->className()) == "PIFile") {((PIFile*)dev)->clear(); return;}
@@ -375,10 +395,8 @@ void PIConfig::_flushDev() {
bool PIConfig::_isEndDev() {
if (!dev) return true;
if (PIString(dev->className()) == "PIFile") {return ((PIFile*)dev)->isEnd();}
if (PIString(dev->className()) == "PIIOString") {return ((PIIOString*)dev)->isEnd();}
return true;
if (!stream) return true;
return stream->isEnd();
}
@@ -390,19 +408,15 @@ void PIConfig::_seekToBeginDev() {
PIString PIConfig::_readLineDev() {
if (!dev) return PIString();
if (PIString(dev->className()) == "PIFile") {return ((PIFile*)dev)->readLine();}
if (PIString(dev->className()) == "PIIOString") {return ((PIIOString*)dev)->readLine();}
return PIString();
if (!stream) return PIString();
return stream->readLine();
}
void PIConfig::_writeDev(const PIString & l) {
//piCout << "write \"" << l << "\"";
if (!dev) return;
if (PIString(dev->className()) == "PIFile") {((PIFile*)dev)->write(l.toUTF8()); return;}
if (PIString(dev->className()) == "PIIOString") {((PIIOString*)dev)->writeString(l); return;}
dev->write(l.toByteArray());
if (!stream) return;
stream->append(l);
}
@@ -799,7 +813,6 @@ void PIConfig::parse() {
includes << iconf << iconf->includes;
updateIncludes();
}
//piCout << "includes" << includes;
other.back() = src;
} else {
name = tree.back();