From cde32bf2f3a719df844db99061cdcf5d1c598354 Mon Sep 17 00:00:00 2001 From: Vadim Lopatin Date: Tue, 3 Nov 2015 14:20:08 +0300 Subject: [PATCH] remove usage of std.stream since it's deprecated; fix build warnings on new DMD --- dlanguilib.visualdproj | 9 ++-- src/dlangui/core/editable.d | 6 +-- src/dlangui/core/events.d | 2 +- src/dlangui/core/linestream.d | 7 +-- src/dlangui/core/logger.d | 4 +- src/dlangui/core/streams.d | 80 +++++++++++++++++++++++++++++++++++ src/dlangui/graphics/images.d | 2 +- src/dlangui/widgets/editors.d | 2 +- 8 files changed, 97 insertions(+), 15 deletions(-) create mode 100644 src/dlangui/core/streams.d diff --git a/dlanguilib.visualdproj b/dlanguilib.visualdproj index b75b2ffe..db4f5a74 100644 --- a/dlanguilib.visualdproj +++ b/dlanguilib.visualdproj @@ -383,6 +383,7 @@ + @@ -398,16 +399,16 @@ - - - - + + + + diff --git a/src/dlangui/core/editable.d b/src/dlangui/core/editable.d index 128fd8b9..fe8fb8d0 100644 --- a/src/dlangui/core/editable.d +++ b/src/dlangui/core/editable.d @@ -21,8 +21,8 @@ import dlangui.core.logger; import dlangui.core.signals; import dlangui.core.collections; import dlangui.core.linestream; +import dlangui.core.streams; import std.algorithm; -import std.stream; import std.conv : to; // uncomment FileFormats debug symbol to dump file formats for loaded/saved files. @@ -1379,7 +1379,7 @@ class EditableContent { bool load(string filename) { clear(); try { - std.stream.File f = new std.stream.File(filename); + InputStream f = new FileInputStream(filename); scope(exit) { f.close(); } return load(f, filename); } catch (Exception e) { @@ -1418,7 +1418,7 @@ class EditableContent { if (!filename) filename = _filename; try { - std.stream.File f = new std.stream.File(filename, FileMode.OutNew); + OutputStream f = new FileOutputStream(filename); scope(exit) { f.close(); } return save(f, filename, format); } catch (Exception e) { diff --git a/src/dlangui/core/events.d b/src/dlangui/core/events.d index 50ebe2f5..219e560c 100644 --- a/src/dlangui/core/events.d +++ b/src/dlangui/core/events.d @@ -514,7 +514,7 @@ struct ButtonDetails { return _doubleClick; } - static final long DOUBLE_CLICK_THRESHOLD_MS = 200; + static long DOUBLE_CLICK_THRESHOLD_MS = 200; void reset() { diff --git a/src/dlangui/core/linestream.d b/src/dlangui/core/linestream.d index 7c4ee849..ff72b241 100644 --- a/src/dlangui/core/linestream.d +++ b/src/dlangui/core/linestream.d @@ -50,7 +50,8 @@ Authors: Vadim Lopatin, coolreader.org@gmail.com */ module dlangui.core.linestream; -import std.stream; +import dlangui.core.streams; +//import std.stream; import std.stdio; import std.conv; import std.utf; @@ -128,7 +129,7 @@ class OutputLineStream { protected void flush() { if (_len > 0) { - _stream.writeExact(_buf.ptr, _len); + _stream.write(cast(ubyte[])_buf[0 .. _len]); _len = 0; } } @@ -483,7 +484,7 @@ class LineStream { data[0] = 0xEF; data[1] = 0xBB; data[2] = 0xBF; - MemoryStream stream = new MemoryStream(data); + InputStream stream = new MemoryInputStream(data); //new MemoryStream(data); return create(stream, filename); } diff --git a/src/dlangui/core/logger.d b/src/dlangui/core/logger.d index fff11f6a..ef0cd05b 100644 --- a/src/dlangui/core/logger.d +++ b/src/dlangui/core/logger.d @@ -32,7 +32,7 @@ Authors: Vadim Lopatin, coolreader.org@gmail.com module dlangui.core.logger; import std.stdio; -import std.datetime; +import std.datetime : SysTime, Clock; /// Log levels enum LogLevel : int { @@ -117,7 +117,7 @@ synchronized class Log { void log(S...)(LogLevel level, S args) { if (logLevel >= level && logFile.isOpen) { SysTime ts = Clock.currTime(); - logFile.writef("%04d-%02d-%02d %02d:%02d:%02d.%03d %s ", ts.year, ts.month, ts.day, ts.hour, ts.minute, ts.second, ts.fracSec.msecs, logLevelName(level)); + logFile.writef("%04d-%02d-%02d %02d:%02d:%02d.%03d %s ", ts.year, ts.month, ts.day, ts.hour, ts.minute, ts.second, ts.fracSecs.split!("msecs").msecs, logLevelName(level)); logFile.writeln(args); logFile.flush(); } diff --git a/src/dlangui/core/streams.d b/src/dlangui/core/streams.d new file mode 100644 index 00000000..93ef166a --- /dev/null +++ b/src/dlangui/core/streams.d @@ -0,0 +1,80 @@ +module dlangui.core.streams; + +private import std.stdio; + +interface Closeable { + void close(); + @property bool isOpen(); +} + +interface InputStream : Closeable { + size_t read(ubyte[] buffer); + @property bool eof(); +} + +interface OutputStream : Closeable { + void write(ubyte[] data); +} + +class FileInputStream : InputStream { + std.stdio.File _file; + this(string filename) { + _file = std.stdio.File(filename, "rb"); + } + void close() { + _file.close(); + } + size_t read(ubyte[] buffer) { + ubyte[] res = _file.rawRead(buffer); + return res.length; + } + @property bool isOpen() { + return _file.isOpen; + } + @property bool eof() { + return _file.eof; + } +} + +class FileOutputStream : OutputStream { + std.stdio.File _file; + this(string filename) { + _file = std.stdio.File(filename, "wb"); + } + void close() { + _file.close(); + } + void write(ubyte[] data) { + _file.rawWrite(data); + } + @property bool isOpen() { + return _file.isOpen; + } +} + +class MemoryInputStream : InputStream { + private ubyte[] _data; + private size_t _pos; + private bool _closed; + this(ubyte[] data) { + _data = data; + _closed = false; + _pos = 0; + } + void close() { + _closed = true; + } + @property bool isOpen() { + return !_closed; + } + size_t read(ubyte[] buffer) { + size_t bytesRead = 0; + for (size_t i = 0; i < buffer.length && _pos < _data.length; bytesRead++) { + buffer[i++] = _data[_pos++]; + } + return bytesRead; + } + @property bool eof() { + return _closed || (_pos >= _data.length); + } +} diff --git a/src/dlangui/graphics/images.d b/src/dlangui/graphics/images.d index b260e199..e31d6b5d 100644 --- a/src/dlangui/graphics/images.d +++ b/src/dlangui/graphics/images.d @@ -40,7 +40,7 @@ import dlangui.core.logger; import dlangui.core.types; import dlangui.graphics.colors; import dlangui.graphics.drawbuf; -import std.stream; +import dlangui.core.streams; import std.path; import std.conv : to; diff --git a/src/dlangui/widgets/editors.d b/src/dlangui/widgets/editors.d index a1aa3adc..5d3473ba 100644 --- a/src/dlangui/widgets/editors.d +++ b/src/dlangui/widgets/editors.d @@ -36,7 +36,7 @@ import dlangui.graphics.colors; public import dlangui.core.editable; import std.algorithm; -import std.stream; +import dlangui.core.streams; /// Modified state change listener interface ModifiedStateListener {