102 lines
3.0 KiB
C++
102 lines
3.0 KiB
C++
// Copyright (C) 2003 Davis E. King (davis@dlib.net)
|
|
// License: Boost Software License See LICENSE.txt for the full license.
|
|
#ifndef DLIB_BIT_STREAM_MULTi_C_
|
|
#define DLIB_BIT_STREAM_MULTi_C_
|
|
|
|
#include "bit_stream_multi_abstract.h"
|
|
#include "../algs.h"
|
|
#include "../assert.h"
|
|
|
|
namespace dlib
|
|
{
|
|
template <
|
|
typename bit_stream_base // implements bit_stream/bit_stream_multi_abstract.h
|
|
>
|
|
class bit_stream_multi_c : public bit_stream_base
|
|
{
|
|
public:
|
|
|
|
void multi_write (
|
|
unsigned long data,
|
|
int num_to_write
|
|
);
|
|
|
|
int multi_read (
|
|
unsigned long& data,
|
|
int num_to_read
|
|
);
|
|
|
|
};
|
|
|
|
template <
|
|
typename bit_stream_base
|
|
>
|
|
inline void swap (
|
|
bit_stream_multi_c<bit_stream_base>& a,
|
|
bit_stream_multi_c<bit_stream_base>& b
|
|
) { a.swap(b); }
|
|
|
|
// ----------------------------------------------------------------------------------------
|
|
// ----------------------------------------------------------------------------------------
|
|
// member function definitions
|
|
// ----------------------------------------------------------------------------------------
|
|
// ----------------------------------------------------------------------------------------
|
|
|
|
template <
|
|
typename bit_stream_base
|
|
>
|
|
void bit_stream_multi_c<bit_stream_base>::
|
|
multi_write (
|
|
unsigned long data,
|
|
int num_to_write
|
|
)
|
|
{
|
|
// make sure requires clause is not broken
|
|
DLIB_CASSERT( (this->is_in_write_mode() == true) && (num_to_write >= 0 && num_to_write <=32),
|
|
"\tvoid bit_stream::write"
|
|
<< "\n\tthe bit stream bust be in write mode and"
|
|
<< "\n\tnum_to_write must be between 0 and 32 inclusive"
|
|
<< "\n\tnum_to_write == " << num_to_write
|
|
<< "\n\tis_in_write_mode() == " << this->is_in_write_mode()
|
|
<< "\n\tthis: " << this
|
|
);
|
|
|
|
// call the real function
|
|
bit_stream_base::multi_write(data,num_to_write);
|
|
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------------------
|
|
|
|
template <
|
|
typename bit_stream_base
|
|
>
|
|
int bit_stream_multi_c<bit_stream_base>::
|
|
multi_read (
|
|
unsigned long& data,
|
|
int num_to_read
|
|
)
|
|
{
|
|
|
|
// make sure requires clause is not broken
|
|
DLIB_CASSERT(( this->is_in_read_mode() == true && ( num_to_read >= 0 && num_to_read <=32 ) ),
|
|
"\tvoid bit_stream::read"
|
|
<< "\n\tyou can't read from a bit_stream that isn't in read mode and"
|
|
<< "\n\tnum_to_read must be between 0 and 32 inclusive"
|
|
<< "\n\tnum_to_read == " << num_to_read
|
|
<< "\n\tis_in_read_mode() == " << this->is_in_read_mode()
|
|
<< "\n\tthis: " << this
|
|
);
|
|
|
|
// call the real function
|
|
return bit_stream_base::multi_read(data,num_to_read);
|
|
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------------------
|
|
|
|
}
|
|
|
|
#endif // DLIB_BIT_STREAM_MULTi_C_
|
|
|