Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/windirstat/llfio.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNiall Douglas (s [underscore] sourceforge {at} nedprod [dot] com) <spamtrap@nedprod.com>2018-04-08 01:44:51 +0300
committerNiall Douglas (s [underscore] sourceforge {at} nedprod [dot] com) <spamtrap@nedprod.com>2018-04-08 01:44:51 +0300
commit60cce3d8b8cce953c67ecb22a082ad4d4c1d3aa9 (patch)
tree4dde97f506595c4590a6e4b49eacad82238b58fd /example
parentd0c561c7d38af021411c41a0161188a241364ac6 (diff)
Replace single buffer convenience overloads of read() and write() with initialiser list ones instead.
Make an example of use cases, and use those snippets in the docs
Diffstat (limited to 'example')
-rw-r--r--example/use_cases.cpp75
1 files changed, 75 insertions, 0 deletions
diff --git a/example/use_cases.cpp b/example/use_cases.cpp
new file mode 100644
index 00000000..e9647d5c
--- /dev/null
+++ b/example/use_cases.cpp
@@ -0,0 +1,75 @@
+/* Examples of AFIO use
+(C) 2018 Niall Douglas <http://www.nedproductions.biz/> (2 commits)
+File Created: Aug 2018
+
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License in the accompanying file
+Licence.txt or at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file Licence.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#include "../include/afio.hpp"
+
+#include <future>
+
+// clang-format off
+
+void sparse_array()
+{
+ //! [sparse_array]
+ namespace afio = AFIO_V2_NAMESPACE;
+
+ // Make me a 1 trillion element sparsely allocated integer array!
+ afio::mapped_file_handle mfh = afio::mapped_temp_inode().value();
+
+ // On an extents based filing system, doesn't actually allocate any physical
+ // storage but does map approximately 4Tb of all bits zero data into memory
+ (void) mfh.truncate(1000000000000ULL * sizeof(int));
+
+ // Create a typed view of the one trillion integers
+ afio::algorithm::mapped_span<int> one_trillion_int_array(mfh);
+
+ // Write and read as you see fit, if you exceed physical RAM it'll be paged out
+ one_trillion_int_array[0] = 5;
+ one_trillion_int_array[999999999999ULL] = 6;
+ //! [sparse_array]
+}
+
+#ifdef __cpp_coroutines
+std::future<void> coroutine_write()
+{
+ //! [coroutine_write]
+ namespace afio = AFIO_V2_NAMESPACE;
+
+ // Create an asynchronous file handle
+ afio::io_service service;
+ afio::async_file_handle fh =
+ afio::async_file(service, {}, "testfile.txt",
+ afio::async_file_handle::mode::write,
+ afio::async_file_handle::creation::if_needed).value();
+
+ // Resize it to 1024 bytes
+ truncate(fh, 1024).value();
+
+ // Begin to asynchronously write "hello world" into the file at offset 0,
+ // suspending execution of this coroutine until completion and then resuming
+ // execution. Requires the Coroutines TS.
+ alignas(4096) char buffer[] = "hello world";
+ co_await co_write(fh, 0, { { buffer, sizeof(buffer) } }).value();
+ //! [coroutine_write]
+}
+#endif