libpsynth 0.2.1
Todo List

File algorithm.hpp
With range STL algorithms of C++0x the _frames versions become trivial. Range based algorithms are not implemented in GCC yet though (as of GCC 4.4.X).

File apply_operation_base.hpp
Lets see if we can get rid of all that preprocessor crap and use variadic templates.

Class boost::is_integral< psynth::sound::packed_sample_value< NumBits > >
Integrate in C++0x type_traits?

File buffered_output.hpp

Implement remaining constructors.

Think about the complexity of wrapping async_output polymorphically. Actually it could be wise to make it pure abstract and turn buffered_async_output into a real adapter.

The converter function used should be parametrised.

Group BufferRangeConcept
Fix this documentation.

Group BufferRangeTransformationsSubbuffer

This is an overload for buffer to avoid the container vs range constness problem. Maybe we should step back in front of this constness nightmare?

This is a non-const version. Non const versions of range factories are needed because buffers are now ranges. Keep working on this.

File channel_base.hpp
Reimplement with C++0x variadic templates?

File declare.hpp
The new template declarations is cool but we have to check the performance.

File factory.hpp
AquĆ­ tal vez haya que generalizar algunas cosas...

File file_common.hpp
Think of a refactor that avoids having to import indirectly async_base in this file and all the output and input interfaces.

Group ImageRangeSTLAlgorithmsTransformFrames
Implement with STL?

File iterator.hpp
Fix many implementations by using boost::iterator_adaptor and boost::iterator_facade.

File meta.hpp
These utilites probably should not be in the psynth::base namespace to avoid conflicts.

File multi_point_envelope.hpp

Thinking about how many classes hardcode time as a float, maybe we should consider making that generic too.

I have the feeling that many of these classes should substitute update by operator () and just use xxx_frames algorithms.

Namespace psynth

Remove all these no typedef includes and make them optional later for compile time performance optimization.

Remove all these no typedef includes and make them optional later for compile time performance optimization.

Why add_reference in std is not working? GCC bug?

Class psynth::base::conf_node

Rethink the backend system.

Template threading model.

Class psynth::base::dynamic_functor< Ret, Args >
Move elsewhere?

Class psynth::base::file_mgr_node

Make thread-safety optional?

Document.

Class psynth::base::flatten< Sequence >
Use join_view instead?

Class psynth::base::hetero_deque< Base >

Pushing an element invalidates the end iterator. Maybe it is desirable to change this behaviour?

Abstract raw memory management into a separate non template class.

Parametrize allocator?

Class psynth::base::lifetime_atexit< T >
This is causing problems with pthreads doing cleanup on exit() too...

Class psynth::base::lifetime_phoenix< T >
Build autotool macro for PSYNTH_ATEXIT_FIXED

Member psynth::base::listener_base::disconnect_all ()
This is implemented using boost::trackable::operator=. boost::trackable documentation states that operator= is a no-op, but its implementation reveals that it actually clears the target connection list.

Class psynth::base::log
Make thread-safety optional. Note that there are some thread-safety in some corner cases in all the new thread safe classes. Please, take a deep look at it and consider using recursive_mutex as a default.

Member psynth::base::log::level
Make it easier to add custom levels.

Class psynth::base::map_const_iterator< Key, Data >
Implement -> operator.

Class psynth::base::map_iterator_base< Key, Data, Iter >
This class was copied from the "Overdose" project:

Member psynth::base::subject_base< Listener >::remove_slot (Signal &sig, const Slot &s)

Is this function useless under boost::signals ??

This also relies on equality of objects generated by boost::bind, make sure that our asumptions are right.

Class psynth::base::tree_node< Node, Key, Traits, ThreadingPolicy >

Fix copy operations.

Fix string operations to be more generic.

Add value_type and other container typedefs.

Class psynth::base::vector_2d< T >
Add more vector operations and calculations.

Class psynth::graph::core::oscillator< Generator, Output >
The audio/sample kind of input difference should finish with automagic buffer conversion.

Class psynth::graph::fn_rt_event< Fn >
Change when inheriting constructors or template aliases are added.

Class psynth::io::async_input< Range >
Not used yet.

Member psynth::io::buffered_async_input< Range, Input >::buffered_async_input (Args...args)
Use std::forward when available.

Member psynth::io::buffered_async_output< Range, Output >::buffered_async_output (Args...args)
Use std::forward when available.

Member psynth::io::detail::caching_file_input_impl< Range, InputPtr >::set_chunk_size (std::size_t cs)
Synchronization?

Member psynth::io::detail::file_input_take_impl (SNDFILE *file, sound::bits8s *ptr, std::size_t frames)
Not supported by libsndfile.

Member psynth::io::detail::file_output_put_impl (SNDFILE *file, const sound::bits8s *ptr, std::size_t frames)
Not supported by libsndfile.

Member psynth::io::file_fmt

Fill with the rest of sndfile formats.

Implement MP3 support. That would require some refactoring.

Class psynth::io::input< Range >
All the IO interface (actually the output class and derivates too) assume that buffers do not model ranges.

Class psynth::io::output< Range >
Take constness into account.

Class psynth::sound::bit_range< RangeSize, Mutable >
Maybe this should be in psynth::base?

Member psynth::sound::buffer_range< Iterator >::value_type
Use iterator_traits ??

Class psynth::sound::buffer_range_type< Range >
Remove this buffer_range_type metafunction?

Member psynth::sound::dynamic_ring_buffer< DBuffer >::dynamic_ring_buffer ()
When will GCC support inheriting constructors? :(

Member psynth::sound::range (ring_buffer< B > &buf)
This returns non-const reference because writing to a ring_buffer_range mutates the internal range state.

Member psynth::sound::ring_buffer< Buffer >::ring_buffer (typename parent_type::size_type size=0, std::size_t alignment=0, const typename Buffer::allocator_type alloc_in=typename Buffer::allocator_type())
When will GCC support inheriting constructors? :(

Class psynth::sound::ring_buffer_base< Buffer, BRange >
Reset on recreate.

Member psynth::sound::ring_buffer_range_base< Range >::set_backwards ()

This seems to be fixed.

caching_file_input_impl::set_backwards seems to compensate the reading backwards bug. Check old implementation.

Class psynth::sound::sample_converter_unsigned< bits32f, DstSampleV >
We changed the range, we have to change it back here.

Class psynth::sound::sample_multiplier< bits32f >
Is this needed?

Class psynth::synth::envelope_values< Sample >
Maybe it is coller to have envelope_values to store certain Frames and not Samples as points for multi-channel envelopes.

Member psynth::synth::find_hill (const Range &data, std::size_t start)
Fix and probably remove.

Member psynth::synth::oscillator< Generator >::default_table_size
Parametrize?

Member PSYNTH_DECLARE_SHARED_POINTER_TEMPLATE (type_name,...)
Use template typedefs when available.

File ring_buffer.hpp
Take a look at this: http://www.rossbencina.com/code/lockfree?q=~rossb/code/lockfree/ And this: http://subversion.jackaudio.org/jack/trunk/jack/libjack/ringbuffer.c To implement such a lock_free ring buffer.

File simple_envelope.hpp
Check that we do not break anything by changing float sample to std::size_t sample in the update () parameter.

File throw.hpp
Some things here are not nice. There are performance issues in forwarding the ostringstream in the log stream adapter. Take a look at boost::exception and maybe integrate it.

File type_traits.hpp
Needid in C++0x?

File typedefs.hpp
Add 24 bit integrals and 64 bit float types.

File variant.hpp

Modify dynamic_image to use boost::variant instead?

Move to psynth::base?