mng/test_mng.cpp
This is an example of use of completion handlers, 
stxxl::block_manager, and 
stxxl::typed_block 
#include <iostream>
#include <stxxl/mng>
#define BLOCK_SIZE (1024 * 512)
struct MyType
{
    int integer;
    
    ~MyType() { }
};
struct my_handler
{
    void operator () (stxxl::request * req)
    {
        STXXL_MSG(req << " done, type=" << req->io_type());
    }
};
typedef stxxl::typed_block<BLOCK_SIZE, MyType> block_type;
int main()
{
    STXXL_MSG(sizeof(MyType) << " " << (BLOCK_SIZE % sizeof(MyType)));
    STXXL_MSG(sizeof(block_type) << " " << BLOCK_SIZE);
    const unsigned nblocks = 2;
    stxxl::BIDArray<BLOCK_SIZE> bids(nblocks);
    std::vector<int> disks(nblocks, 2);
    stxxl::request_ptr * reqs = new stxxl::request_ptr[nblocks];
    stxxl::block_manager * bm = stxxl::block_manager::get_instance();
    bm->new_blocks(stxxl::striping(), bids.begin(), bids.end());
    block_type * block = new block_type[2];
    STXXL_MSG(std::hex);
    STXXL_MSG("Allocated block address    : " << long(block));
    STXXL_MSG("Allocated block address + 1: " << long(block + 1));
    STXXL_MSG(std::dec);
    unsigned i = 0;
    for (i = 0; i < block_type::size; ++i)
    {
        block->elem[i].integer = i;
        
    }
    for (i = 0; i < nblocks; ++i)
        reqs[i] = block->write(bids[i], my_handler());
    std::cout << "Waiting " << std::endl;
    stxxl::wait_all(reqs, nblocks);
    for (i = 0; i < nblocks; ++i)
    {
        reqs[i] = block->read(bids[i], my_handler());
        reqs[i]->wait();
        for (int j = 0; j < block_type::size; ++j)
        {
            if (j != block->elem[j].integer)
            {
                STXXL_MSG("Error in block " << std::hex << i << " pos: " << j
                                            << " value read: " << block->elem[j].integer);
            }
        }
    }
    bm->delete_blocks(bids.begin(), bids.end());
    delete[] reqs;
    delete[] block;
#if 0
    
    BIDArray<0> vbids(nblocks);
    for (i = 0; i < nblocks; i++)
        vbids[i].size = 1024 + i;
    bm->new_blocks(striping(), vbids.begin(), vbids.end());
    for (i = 0; i < nblocks; i++)
        STXXL_MSG("Allocated block: offset=" << vbids[i].offset << ", size=" << vbids[i].size);
    bm->delete_blocks(vbids.begin(), vbids.end());
#endif
}