00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00016
00017 #include <iostream>
00018 #include <stxxl/mng>
00019
00020 #define BLOCK_SIZE (1024 * 512)
00021
00022 struct MyType
00023 {
00024 int integer;
00025
00026 ~MyType() { }
00027 };
00028
00029 struct my_handler
00030 {
00031 void operator () (stxxl::request * req)
00032 {
00033 STXXL_MSG(req << " done, type=" << req->io_type());
00034 }
00035 };
00036
00037 typedef stxxl::typed_block<BLOCK_SIZE, MyType> block_type;
00038
00039 int main()
00040 {
00041 STXXL_MSG(sizeof(MyType) << " " << (BLOCK_SIZE % sizeof(MyType)));
00042 STXXL_MSG(sizeof(block_type) << " " << BLOCK_SIZE);
00043 const unsigned nblocks = 2;
00044 stxxl::BIDArray<BLOCK_SIZE> bids(nblocks);
00045 std::vector<int> disks(nblocks, 2);
00046 stxxl::request_ptr * reqs = new stxxl::request_ptr[nblocks];
00047 stxxl::block_manager * bm = stxxl::block_manager::get_instance();
00048 bm->new_blocks(stxxl::striping(), bids.begin(), bids.end());
00049
00050 block_type * block = new block_type[2];
00051 STXXL_MSG(std::hex);
00052 STXXL_MSG("Allocated block address : " << long(block));
00053 STXXL_MSG("Allocated block address + 1: " << long(block + 1));
00054 STXXL_MSG(std::dec);
00055 unsigned i = 0;
00056 for (i = 0; i < block_type::size; ++i)
00057 {
00058 block->elem[i].integer = i;
00059
00060 }
00061 for (i = 0; i < nblocks; ++i)
00062 reqs[i] = block->write(bids[i], my_handler());
00063
00064
00065 std::cout << "Waiting " << std::endl;
00066 stxxl::wait_all(reqs, nblocks);
00067
00068 for (i = 0; i < nblocks; ++i)
00069 {
00070 reqs[i] = block->read(bids[i], my_handler());
00071 reqs[i]->wait();
00072 for (int j = 0; j < block_type::size; ++j)
00073 {
00074 if (j != block->elem[j].integer)
00075 {
00076 STXXL_MSG("Error in block " << std::hex << i << " pos: " << j
00077 << " value read: " << block->elem[j].integer);
00078 }
00079 }
00080 }
00081
00082
00083 bm->delete_blocks(bids.begin(), bids.end());
00084
00085 delete[] reqs;
00086 delete[] block;
00087
00088 #if 0
00089
00090
00091 BIDArray<0> vbids(nblocks);
00092 for (i = 0; i < nblocks; i++)
00093 vbids[i].size = 1024 + i;
00094
00095 bm->new_blocks(striping(), vbids.begin(), vbids.end());
00096
00097 for (i = 0; i < nblocks; i++)
00098 STXXL_MSG("Allocated block: offset=" << vbids[i].offset << ", size=" << vbids[i].size);
00099
00100 bm->delete_blocks(vbids.begin(), vbids.end());
00101 #endif
00102 }