[iterators] Do I need and how to use a custom difference type
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 I have a custom vector-like template class for scalar types which compresses the contents similar to the infamous vector<bool> template. If for example all stored values are in the range from 0 to 1023 then only 10 bits will be used to store each value. If you insert the value 1024 to the sequence the bitcount will be increased to 11 and the whole sequence get rewritten. Now I want to use boost::iterator to create a "random access traversal iterator". I think I have to provide a custom Difference parameter, because std::ptrdiff_t will not work (right?). I have simply no idea how to do that. Any comments are welcome. Thank you, Markus -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.2.2 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iD8DBQFFNLIUdnooMonJSYkRAi3dAJ91CwtdgBRdjDnt0gFKxvh0Hq7WVwCfUST/ kpFy9EA5MGZvU1cF7RKnjZw= =c53t -----END PGP SIGNATURE-----
On 10/17/06, Markus Bernhardt
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
I have a custom vector-like template class for scalar types which compresses the contents similar to the infamous vector<bool> template.
If for example all stored values are in the range from 0 to 1023 then only 10 bits will be used to store each value. If you insert the value 1024 to the sequence the bitcount will be increased to 11 and the whole sequence get rewritten.
Now I want to use boost::iterator to create a "random access traversal iterator". I think I have to provide a custom Difference parameter, because std::ptrdiff_t will not work (right?).
ptrdiff_t will work. the difference between element #5 and element #10 is still 5. It may be some other number of BYTES + BITS away, but 'difference' measures the distance in number of elements, not number of bytes. Or are you worried that ptrdiff_t isn't big enough? (ie a container with 2 bits/element could have more than 2^32 elements in a 32 bit system, and thus ptrdiff_t is too small). I have simply no idea how to do that. The hard part, I think, is internally keeping track of where you *really* are (pointer + bit offset). Tony Any comments are welcome.
Thank you, Markus -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.2.2 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org
iD8DBQFFNLIUdnooMonJSYkRAi3dAJ91CwtdgBRdjDnt0gFKxvh0Hq7WVwCfUST/ kpFy9EA5MGZvU1cF7RKnjZw= =c53t -----END PGP SIGNATURE----- _______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users
participants (2)
-
Gottlob Frege
-
Markus Bernhardt