Boost logo

Boost :

From: Rozental, Gennadiy (Gennadiy_at_[hidden])
Date: 2002-09-09 12:08:23

> I've been working on the interface and come up with something
> I'm pretty
> happy with. The name still needs thrashing out, and I expect
> to have some
> further constructive discussion on this in the future. But
> for now, what
> would you say to an interface along these lines? Note that this is an
> abstract of the full interface omitting the change list
> details.(sorry about
> the formatting!)
> namespace boost {
> template <typename Seq>
> class longest_common_subsequence : noncopyable
> {
> public:
> // list of changes made to sequence1 to create sequence2
> typedef ... change_set;
> public:
> longest_common_subsequence(const Seq &first, const Seq &second);
> // note there's also a ctor taking const_iterator pairs for
> // the first and second seq
> unsigned compute_lcs( unsigned mask,
> longest_common_subsequence<Seq>::change_set *changes);
> bool reconstruct_sequence( const
> longest_common_subsequence<Seq>::change_set &changes,
> const Seq &original,
> Seq *reconstructed);
> };
> // namespace boost

In most part I disagree with what you proposing here.

1. These are two different algorithms and no need to mix them.
2. What is change_set is it some special type?
3. STL algorithms are iterator based, not sequence based. WE should keep it
that way
4. Why are you using pointers and not a references?
5. How could I obtain changes to pass as a first argument ot second
algorithm if you don't return them?
6. Why do e need class at all?

Here how I invision it

template<typename InIt1, typename InIt2, typename OutIt >
longest_common_subsequence( InIt1 first_begin, InIt1 first_end,
                                                InIt2 second_begin,
                                                OutIt& res_begin );

template<typename InIt, typename DiffIt, typename OutIt >
apply_diff( InIt input_begin, InIt input_end, InIt diff_begin, OutIt
res_begin );


Boost list run by bdawes at, gregod at, cpdaniel at, john at