138 lines
3.8 KiB
C++
138 lines
3.8 KiB
C++
// Copyright (C) 2003 Davis E. King (davis@dlib.net)
|
|
// License: Boost Software License See LICENSE.txt for the full license.
|
|
#ifndef DLIB_CPP_TOKENIZER_KERNEl_C_
|
|
#define DLIB_CPP_TOKENIZER_KERNEl_C_
|
|
|
|
#include "cpp_tokenizer_kernel_abstract.h"
|
|
#include "../assert.h"
|
|
#include <string>
|
|
#include <iostream>
|
|
|
|
namespace dlib
|
|
{
|
|
|
|
template <
|
|
typename tokenizer
|
|
>
|
|
class cpp_tokenizer_kernel_c : public tokenizer
|
|
{
|
|
|
|
public:
|
|
std::istream& get_stream (
|
|
) const;
|
|
|
|
void get_token (
|
|
int& type,
|
|
std::string& token
|
|
);
|
|
|
|
int peek_type (
|
|
) const;
|
|
|
|
const std::string& peek_token (
|
|
) const;
|
|
|
|
};
|
|
|
|
template <
|
|
typename tokenizer
|
|
>
|
|
inline void swap (
|
|
cpp_tokenizer_kernel_c<tokenizer>& a,
|
|
cpp_tokenizer_kernel_c<tokenizer>& b
|
|
) { a.swap(b); }
|
|
|
|
// ----------------------------------------------------------------------------------------
|
|
// ----------------------------------------------------------------------------------------
|
|
// member function definitions
|
|
// ----------------------------------------------------------------------------------------
|
|
// ----------------------------------------------------------------------------------------
|
|
|
|
template <
|
|
typename tokenizer
|
|
>
|
|
std::istream& cpp_tokenizer_kernel_c<tokenizer>::
|
|
get_stream (
|
|
) const
|
|
{
|
|
// make sure requires clause is not broken
|
|
DLIB_CASSERT( this->stream_is_set() == true,
|
|
"\tstd::istream& cpp_tokenizer::get_stream()"
|
|
<< "\n\tyou must set a stream for this object before you can get it"
|
|
<< "\n\tthis: " << this
|
|
);
|
|
|
|
// call the real function
|
|
return tokenizer::get_stream();
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------------------
|
|
|
|
template <
|
|
typename tokenizer
|
|
>
|
|
const std::string& cpp_tokenizer_kernel_c<tokenizer>::
|
|
peek_token (
|
|
) const
|
|
{
|
|
// make sure requires clause is not broken
|
|
DLIB_CASSERT( this->stream_is_set() == true,
|
|
"\tconst std::string& cpp_tokenizer::peek_token()"
|
|
<< "\n\tyou must set a stream for this object before you can peek at what it contains"
|
|
<< "\n\tthis: " << this
|
|
);
|
|
|
|
// call the real function
|
|
return tokenizer::peek_token();
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------------------
|
|
|
|
template <
|
|
typename tokenizer
|
|
>
|
|
int cpp_tokenizer_kernel_c<tokenizer>::
|
|
peek_type (
|
|
) const
|
|
{
|
|
// make sure requires clause is not broken
|
|
DLIB_CASSERT( this->stream_is_set() == true,
|
|
"\tint cpp_tokenizer::peek_type()"
|
|
<< "\n\tyou must set a stream for this object before you can peek at what it contains"
|
|
<< "\n\tthis: " << this
|
|
);
|
|
|
|
// call the real function
|
|
return tokenizer::peek_type();
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------------------
|
|
|
|
template <
|
|
typename tokenizer
|
|
>
|
|
void cpp_tokenizer_kernel_c<tokenizer>::
|
|
get_token (
|
|
int& type,
|
|
std::string& token
|
|
)
|
|
{
|
|
// make sure requires clause is not broken
|
|
DLIB_CASSERT( this->stream_is_set() == true,
|
|
"\tvoid cpp_tokenizer::get_token()"
|
|
<< "\n\tyou must set a stream for this object before you can get tokens from it."
|
|
<< "\n\tthis: " << this
|
|
);
|
|
|
|
// call the real function
|
|
tokenizer::get_token(type,token);
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------------------
|
|
|
|
}
|
|
|
|
#endif // DLIB_TOKENIZER_KERNEl_C_
|
|
|
|
|