{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# File arrays" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "File arrays are file-backed, cached arrays. They implement persistent arrays stored in the local file system or in the cloud, in a variety of file formats." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#include \n", "#include \n", "#include " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "An on-disk file array stored in binary format:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "using file_array = xt::xfile_array>;" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Since the file doesn't alreay exist, we use the `init` file mode:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "file_array a1(\"a1.bin\", xt::xfile_mode::init);" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "std::vector shape = {2, 2};\n", "a1.resize(shape);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's assign a value to an element of the file array." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "a1(0, 1) = 1.;" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The in-memory element value has changed, but not the on-disk file yet. The on-disk file will change when the array is explicitly flushed, or when it is destroyed (e.g. when going out of scope)." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "a1.flush();" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now the on-disk file has changed." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's point `a2` to `a1`'s file. For that, we use the `load` file mode:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "file_array a2(\"a1.bin\", xt::xfile_mode::load);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The binary format doesn't store the shape, so we reshape the array." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "a2.resize(shape);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's ensure that `a1` and `a2` are equal." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "assert(xt::all(xt::equal(a1, a2)));" ] } ], "metadata": { "kernelspec": { "display_name": "C++14", "language": "C++14", "name": "xcpp14" }, "language_info": { "codemirror_mode": "text/x-c++src", "file_extension": ".cpp", "mimetype": "text/x-c++src", "name": "c++", "version": "14" } }, "nbformat": 4, "nbformat_minor": 4 }