
Maarten Kronenburg wrote:
"Rene Rivera" wrote in message
I don't care that much what the form of access looks like. The important aspect is having a *defined representation* that users can convert to and from. For example other access methods might be:
// Iterators, like std::string::data: std::pair<word_type const *, word_type const *> integer::data() const;
// Inserter, like std::string::copy: template <typename OutputIterator> void integer::copy(OutputIterator) const;
// Stream like: template <typename Container> operator << (Container &, integer const &);
Of course there would need to be a corresponding constructor to have
Rene, The user can define an iterator with the bit access functions highest_bit and get_sub. The get_sub is O(1) when nbits is limited. Then the user must define what is iterated over, bits or bytes or words or... The integer class is not a template, because templates do not provide run-time polymorphism. Regards, Maarten. "Rene Rivera" <grafik.list@redshift-software.com> wrote in message news:447FA7B1.4080800@redshift-software.com... the
data round trip.
But what should the iterator iterate over? Bits? Bytes?
A "word_type" you define, which at minimum would be bytes. And by you I mean the TR2 document you are proposing.
In my opinion get_sub of a bit or byte or whatever, with a converter like to_unsigned_int, gives you the O(1) access you require.
Sure, but it doesn't follow existing STL practices and norms.
Perhaps the user can define an iterator based on get_sub.
Of course, it's as simple as:
==== typedef boost::transform_iterator< boost::function< uint8_t (std::size_t) >, boost::counting_iterator<std::size_t> > I;
integer n = 5;
uint8_t get_uint8_n(integer * i, std::size_t n) { return i->get_sub(n*8,8); }
I begin_i(I::base_type(0),boost::bind(&get_uint8_n,&n,_1)); I end_i(I::base_type(n.size(),boost::bind(&get_uint8_n,&n,_1,8));
std::vector<uint8_t> m(begin_i,end_i); ====
But first there's no integer::size(), and second it seems like a rather complex thing to push onto users (even given how simple the above is with the use of the Boost.Iterators and Boost.Bind libraries).
-- -- Grafik - Don't Assume Anything -- Redshift Software, Inc. - http://redshift-software.com -- rrivera/acm.org - grafik/redshift-software.com -- 102708583/icq - grafikrobot/aim - grafikrobot/yahoo _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost