diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2022-02-04 11:30:35 +0000 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2022-02-04 15:06:38 +0000 |
commit | ff762c61445c6db3c1ebe78335b7ca92e8ebc257 (patch) | |
tree | 1e1fa6d5f0a403f5b098d406e1082c9c99fe8d08 /vespalib | |
parent | 52cfc5054f8f79cc541f5d3603cf5d57af92b613 (diff) |
Automatic select between heap or mmap allocation
Diffstat (limited to 'vespalib')
-rw-r--r-- | vespalib/src/vespa/vespalib/stllike/asciistream.cpp | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/vespalib/src/vespa/vespalib/stllike/asciistream.cpp b/vespalib/src/vespa/vespalib/stllike/asciistream.cpp index bedd0f119c6..0d60a5cca35 100644 --- a/vespalib/src/vespa/vespalib/stllike/asciistream.cpp +++ b/vespalib/src/vespa/vespalib/stllike/asciistream.cpp @@ -3,8 +3,8 @@ #include "asciistream.h" #include <vespa/vespalib/util/stringfmt.h> #include <vespa/vespalib/util/exceptions.h> -#include <vespa/vespalib/util/memory.h> #include <vespa/vespalib/util/size_literals.h> +#include <vespa/vespalib/util/alloc.h> #include <vespa/vespalib/locale/c.h> #include <vespa/fastos/file.h> #include <limits> @@ -564,7 +564,8 @@ void asciistream::write(const void * buf, size_t len) _rbuf = _wbuf; } -std::vector<string> asciistream::getlines(char delim) +std::vector<string> +asciistream::getlines(char delim) { std::vector<string> lines; while (!eof()) { @@ -573,7 +574,8 @@ std::vector<string> asciistream::getlines(char delim) return lines; } -string asciistream::getline(char delim) +string +asciistream::getline(char delim) { string line; const size_t start(_rPos); @@ -588,7 +590,8 @@ string asciistream::getline(char delim) return line; } -asciistream asciistream::createFromFile(stringref fileName) +asciistream +asciistream::createFromFile(stringref fileName) { FastOS_File file(vespalib::string(fileName).c_str()); asciistream is; @@ -597,14 +600,14 @@ asciistream asciistream::createFromFile(stringref fileName) if (sz < 0) { throw IoException("Failed getting size of file " + fileName + " : Error=" + file.getLastErrorString(), IoException::UNSPECIFIED, VESPA_STRLOC); } - MallocPtr buf(sz); - ssize_t actual = file.Read(buf, sz); + alloc::Alloc buf = alloc::Alloc::alloc(sz); + ssize_t actual = file.Read(buf.get(), sz); if (actual != sz) { asciistream e; e << "Failed reading " << sz << " bytes from file " << fileName; throw IoException(e.str() + " : Error=" + file.getLastErrorString(), IoException::UNSPECIFIED, VESPA_STRLOC); } - is << stringref(buf.c_str(), buf.size()); + is << stringref(static_cast<const char *>(buf.get()), sz); } return is; } @@ -614,9 +617,10 @@ asciistream asciistream::createFromDevice(stringref fileName) FastOS_File file(vespalib::string(fileName).c_str()); asciistream is; if (file.OpenReadOnly()) { - MallocPtr buf(64_Ki); - for (ssize_t actual = file.Read(buf, buf.size()); actual > 0; actual = file.Read(buf, buf.size())) { - is << stringref(buf.c_str(), actual); + constexpr size_t SZ = 64_Ki; + auto buf = std::make_unique<char []>(SZ); + for (ssize_t actual = file.Read(buf.get(), SZ); actual > 0; actual = file.Read(buf.get(), SZ)) { + is << stringref(buf.get(), actual); } } return is; |