// Copyright (C) 2003 Davis E. King (davis@dlib.net) // License: Boost Software License See LICENSE.txt for the full license. #undef DLIB_BIT_STREAM_MULTi_ABSTRACT_ #ifdef DLIB_BIT_STREAM_MULTi_ABSTRACT_ #include "bit_stream_kernel_abstract.h" namespace dlib { template < typename bit_stream_base > class bit_stream_multi : public bit_stream_base { /*! REQUIREMENTS ON BIT_STREAM_BASE it is an implementation of bit_stream/bit_stream_kernel_abstract.h WHAT THIS EXTENSION DOES FOR BIT_STREAM this gives a bit_stream object the ability to read/write multible bits at a time !*/ public: void multi_write ( unsigned long data, int num_to_write ); /*! requires - is_in_write_mode() == true - 0 <= num_to_write <= 32 ensures - num_to_write low order bits from data will be written to the ostream - object associated with *this example: if data is 10010 then the bits will be written in the order 1,0,0,1,0 !*/ int multi_read ( unsigned long& data, int num_to_read ); /*! requires - is_in_read_mode() == true - 0 <= num_to_read <= 32 ensures - tries to read num_to_read bits into the low order end of #data example: if the incoming bits were 10010 then data would end up with 10010 as its low order bits - all of the bits in #data not filled in by multi_read() are zero - returns the number of bits actually read into #data !*/ }; template < typename bit_stream_base > inline void swap ( bit_stream_multi<bit_stream_base>& a, bit_stream_multi<bit_stream_base>& b ) { a.swap(b); } /*! provides a global swap function !*/ } #endif // DLIB_BIT_STREAM_MULTi_ABSTRACT_