TIle-db s3 documentation

For reference, here is example code accessing a bucket in us-west-1:

#include <tiledb/tiledb>
#include <iostream>

using namespace tiledb;
// dimension type
using DIM_T = uint64_t;

int main(int argc, char** argv) {
    if (std::getenv("AWS_ACCESS_KEY_ID") == nullptr || std::getenv("AWS_SECRET_ACCESS_KEY") == nullptr) {
        std::cout << "missing AWS_* access environment variables!" << std::endl;
        exit(1);
    }

    tiledb::Config cfg;
    cfg["vfs.s3.aws_access_key_id"] = std::string(std::getenv("AWS_ACCESS_KEY_ID"));
    cfg["vfs.s3.aws_secret_access_key"] = std::string(std::getenv("AWS_SECRET_ACCESS_KEY"));
    cfg["vfs.s3.region"] = "us-west-1";

    tiledb::Context ctx(cfg);

    // replace with URI of bucket you have access to using credentials above
    std::string uri("s3://bucket-us-west-1/test-array-4x4");

    auto array = tiledb::Array(ctx, uri, TILEDB_READ);
    auto schema = array.schema();
    auto domain = schema.domain();
    std::cout << "ndim: " << domain.ndim() << std::endl;

    std::vector<double> data(16);

    Query query(ctx, array, TILEDB_READ);
    query.set_layout(TILEDB_ROW_MAJOR)
         .set_buffer("", data);

    std::vector<DIM_T> subarray({0,3,0,3});
    query.set_subarray(subarray);

    query.submit();

    if (query.query_status() != Query::Status::COMPLETE) {
        std::cout << "query returned but not 'complete'" << std::endl;
        exit(1);
    }

    std::cout << "data[0,0]: " << data[0] << " data[3,3]: " << data[15] << std::endl;
}