mirror of
https://gitcode.com/gh_mirrors/ope/OpenFace.git
synced 2026-05-19 05:37:54 +00:00
254 lines
6.4 KiB
C++
254 lines
6.4 KiB
C++
// Copyright (C) 2003 Davis E. King (davis@dlib.net)
|
|
// License: Boost Software License See LICENSE.txt for the full license.
|
|
#ifndef DLIB_SEQUENCE_KERNEl_C_
|
|
#define DLIB_SEQUENCE_KERNEl_C_
|
|
|
|
#include "sequence_kernel_abstract.h"
|
|
#include "../algs.h"
|
|
#include "../assert.h"
|
|
|
|
namespace dlib
|
|
{
|
|
|
|
template <
|
|
typename seq_base
|
|
>
|
|
class sequence_kernel_c : public seq_base
|
|
{
|
|
typedef typename seq_base::type T;
|
|
public:
|
|
|
|
|
|
void add (
|
|
unsigned long pos,
|
|
T& item
|
|
);
|
|
|
|
void remove (
|
|
unsigned long pos,
|
|
T& item
|
|
);
|
|
|
|
const T& operator[] (
|
|
unsigned long pos
|
|
) const;
|
|
|
|
T& operator[] (
|
|
unsigned long pos
|
|
);
|
|
|
|
void cat (
|
|
sequence_kernel_c& item
|
|
);
|
|
|
|
const T& element (
|
|
) const;
|
|
|
|
T& element (
|
|
);
|
|
|
|
void remove_any (
|
|
T& item
|
|
);
|
|
|
|
};
|
|
|
|
|
|
template <
|
|
typename seq_base
|
|
>
|
|
inline void swap (
|
|
sequence_kernel_c<seq_base>& a,
|
|
sequence_kernel_c<seq_base>& b
|
|
) { a.swap(b); }
|
|
|
|
// ----------------------------------------------------------------------------------------
|
|
// ----------------------------------------------------------------------------------------
|
|
// member function definitions
|
|
// ----------------------------------------------------------------------------------------
|
|
// ----------------------------------------------------------------------------------------
|
|
|
|
template <
|
|
typename seq_base
|
|
>
|
|
void sequence_kernel_c<seq_base>::
|
|
add(
|
|
unsigned long pos,
|
|
T& item
|
|
)
|
|
{
|
|
|
|
// make sure requires clause is not broken
|
|
DLIB_CASSERT(( pos <= this->size() ),
|
|
"\tvoid sequence::add"
|
|
<< "\n\tpos must be >= 0 and <= size()"
|
|
<< "\n\tpos: " << pos
|
|
<< "\n\tsize(): " << this->size()
|
|
<< "\n\tthis: " << this
|
|
);
|
|
|
|
// call the real function
|
|
seq_base::add(pos,item);
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------------------
|
|
|
|
template <
|
|
typename seq_base
|
|
>
|
|
void sequence_kernel_c<seq_base>::
|
|
cat (
|
|
sequence_kernel_c<seq_base>& item
|
|
)
|
|
{
|
|
// make sure requires clause is not broken
|
|
DLIB_CASSERT(&item != this,
|
|
"\tvoid sequence::cat"
|
|
<< "\n\tyou can't concatenate a sequence onto itself"
|
|
<< "\n\t&item: " << &item
|
|
<< "\n\tthis: " << this
|
|
);
|
|
|
|
// call the real function
|
|
seq_base::cat(item);
|
|
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------------------
|
|
|
|
template <
|
|
typename seq_base
|
|
>
|
|
void sequence_kernel_c<seq_base>::
|
|
remove (
|
|
unsigned long pos,
|
|
T& item
|
|
)
|
|
{
|
|
// make sure requires clause is not broken
|
|
DLIB_CASSERT(( pos < this->size() ),
|
|
"\tvoid sequence::remove"
|
|
<< "\n\tpos must be >= 0 and < size()"
|
|
<< "\n\tpos: " << pos
|
|
<< "\n\tsize(): " << this->size()
|
|
<< "\n\tthis: " << this
|
|
);
|
|
|
|
// call the real function
|
|
seq_base::remove(pos,item);
|
|
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------------------
|
|
|
|
template <
|
|
typename seq_base
|
|
>
|
|
const typename seq_base::type& sequence_kernel_c<seq_base>::
|
|
operator[] (
|
|
unsigned long pos
|
|
) const
|
|
{
|
|
|
|
// make sure requires clause is not broken
|
|
DLIB_CASSERT(( pos < this->size() ),
|
|
"\tconst T& sequence::operator[]"
|
|
<< "\n\tpos must be >= 0 and < size()"
|
|
<< "\n\tpos: " << pos
|
|
<< "\n\tsize(): " << this->size()
|
|
<< "\n\tthis: " << this
|
|
);
|
|
|
|
// call the real function
|
|
return seq_base::operator[](pos);
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------------------
|
|
|
|
template <
|
|
typename seq_base
|
|
>
|
|
typename seq_base::type& sequence_kernel_c<seq_base>::
|
|
operator[] (
|
|
unsigned long pos
|
|
)
|
|
{
|
|
|
|
// make sure requires clause is not broken
|
|
DLIB_CASSERT(( pos < this->size() ),
|
|
"\tT& sequence::operator[]"
|
|
<< "\n\tpos must be >= 0 and < size()"
|
|
<< "\n\tpos: " << pos
|
|
<< "\n\tsize(): " << this->size()
|
|
<< "\n\tthis: " << this
|
|
);
|
|
|
|
// call the real function
|
|
return seq_base::operator[](pos);
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------------------
|
|
|
|
template <
|
|
typename seq_base
|
|
>
|
|
const typename seq_base::type& sequence_kernel_c<seq_base>::
|
|
element (
|
|
) const
|
|
{
|
|
DLIB_CASSERT(this->current_element_valid() == true,
|
|
"\tconst T& sequence::element() const"
|
|
<< "\n\tyou can't access the current element if it doesn't exist"
|
|
<< "\n\tthis: " << this
|
|
);
|
|
|
|
return seq_base::element();
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------------------
|
|
|
|
template <
|
|
typename seq_base
|
|
>
|
|
typename seq_base::type& sequence_kernel_c<seq_base>::
|
|
element (
|
|
)
|
|
{
|
|
DLIB_CASSERT(this->current_element_valid() == true,
|
|
"\tT& sequence::element()"
|
|
<< "\n\tyou can't access the current element if it doesn't exist"
|
|
<< "\n\tthis: " << this
|
|
);
|
|
|
|
return seq_base::element();
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------------------
|
|
|
|
template <
|
|
typename seq_base
|
|
>
|
|
void sequence_kernel_c<seq_base>::
|
|
remove_any (
|
|
T& item
|
|
)
|
|
{
|
|
// make sure requires clause is not broken
|
|
DLIB_CASSERT( (this->size() > 0),
|
|
"\tvoid sequence::remove_any"
|
|
<< "\n\tsize() must be greater than zero if something is going to be removed"
|
|
<< "\n\tsize(): " << this->size()
|
|
<< "\n\tthis: " << this
|
|
);
|
|
|
|
// call the real function
|
|
seq_base::remove_any(item);
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------------------
|
|
|
|
}
|
|
|
|
#endif // DLIB_SEQUENCE_KERNEl_C_
|
|
|