ENH: support move sematics for get/set putback token
This commit is contained in:
parent
944840f8d6
commit
4daaf6dd2a
@ -51,19 +51,27 @@ const Foam::token& Foam::Istream::peekBack() const noexcept
|
|||||||
return (putBackAvail_ ? putBackToken_ : token::undefinedToken);
|
return (putBackAvail_ ? putBackToken_ : token::undefinedToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Return the putback token if available or fetch a new token
|
||||||
|
// from the stream.
|
||||||
|
//
|
||||||
|
// Foam::token& Foam::Istream::peekToken()
|
||||||
|
// {
|
||||||
|
// if (!putBackAvail_)
|
||||||
|
// {
|
||||||
|
// putBackToken_.reset();
|
||||||
|
// token tok;
|
||||||
|
// this->read(tok);
|
||||||
|
// putBackToken_ = std::move(tok);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// return putBackToken_;
|
||||||
|
// }
|
||||||
|
|
||||||
bool Foam::Istream::peekBack(token& tok)
|
|
||||||
|
void Foam::Istream::putBackClear()
|
||||||
{
|
{
|
||||||
if (putBackAvail_)
|
putBackAvail_ = false;
|
||||||
{
|
putBackToken_.reset();
|
||||||
tok = putBackToken_;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
tok.reset();
|
|
||||||
}
|
|
||||||
|
|
||||||
return putBackAvail_;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -89,6 +97,28 @@ void Foam::Istream::putBack(const token& tok)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Foam::Istream::putBack(token&& tok)
|
||||||
|
{
|
||||||
|
if (bad())
|
||||||
|
{
|
||||||
|
FatalIOErrorInFunction(*this)
|
||||||
|
<< "Attempt to put back onto bad stream"
|
||||||
|
<< exit(FatalIOError);
|
||||||
|
}
|
||||||
|
else if (putBackAvail_)
|
||||||
|
{
|
||||||
|
FatalIOErrorInFunction(*this)
|
||||||
|
<< "Attempt to put back another token"
|
||||||
|
<< exit(FatalIOError);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
putBackAvail_ = true;
|
||||||
|
putBackToken_ = std::move(tok);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
bool Foam::Istream::getBack(token& tok)
|
bool Foam::Istream::getBack(token& tok)
|
||||||
{
|
{
|
||||||
if (bad())
|
if (bad())
|
||||||
@ -100,7 +130,7 @@ bool Foam::Istream::getBack(token& tok)
|
|||||||
else if (putBackAvail_)
|
else if (putBackAvail_)
|
||||||
{
|
{
|
||||||
putBackAvail_ = false;
|
putBackAvail_ = false;
|
||||||
tok = putBackToken_;
|
tok = std::move(putBackToken_);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -77,10 +77,7 @@ protected:
|
|||||||
// Protected Member Functions
|
// Protected Member Functions
|
||||||
|
|
||||||
//- True if putback token is in use
|
//- True if putback token is in use
|
||||||
bool hasPutback() const noexcept
|
bool hasPutback() const noexcept { return putBackAvail_; }
|
||||||
{
|
|
||||||
return putBackAvail_;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@ -124,15 +121,16 @@ public:
|
|||||||
// if a putback is unavailable.
|
// if a putback is unavailable.
|
||||||
const token& peekBack() const noexcept;
|
const token& peekBack() const noexcept;
|
||||||
|
|
||||||
//- Fetch putback token without removing it.
|
//- Drop the putback token
|
||||||
// \return false sets the token to undefined if no put-back
|
void putBackClear();
|
||||||
// was available
|
|
||||||
bool peekBack(token& tok);
|
|
||||||
|
|
||||||
//- Put back a token. Only a single put back is permitted
|
//- Put back a token (copy). Only a single put back is permitted
|
||||||
void putBack(const token& tok);
|
void putBack(const token& tok);
|
||||||
|
|
||||||
//- Get the put-back token if there is one.
|
//- Put back a token (move). Only a single put back is permitted
|
||||||
|
void putBack(token&& tok);
|
||||||
|
|
||||||
|
//- Retrieve the put-back token if there is one.
|
||||||
// \return false and sets token to undefined if no put-back
|
// \return false and sets token to undefined if no put-back
|
||||||
// was available
|
// was available
|
||||||
bool getBack(token& tok);
|
bool getBack(token& tok);
|
||||||
|
@ -273,6 +273,12 @@ Foam::Istream& Foam::UIPstreamBase::read(token& t)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Reset token, adjust its line number according to the stream
|
||||||
|
t.reset();
|
||||||
|
t.lineNumber(this->lineNumber());
|
||||||
|
|
||||||
|
|
||||||
// Read character, return on error
|
// Read character, return on error
|
||||||
// - with additional handling for special stream flags
|
// - with additional handling for special stream flags
|
||||||
|
|
||||||
@ -303,9 +309,6 @@ Foam::Istream& Foam::UIPstreamBase::read(token& t)
|
|||||||
while (c == token::FLAG);
|
while (c == token::FLAG);
|
||||||
|
|
||||||
|
|
||||||
// Set the line number of this token to the current stream line number
|
|
||||||
t.lineNumber(this->lineNumber());
|
|
||||||
|
|
||||||
// Analyse input starting with this character.
|
// Analyse input starting with this character.
|
||||||
switch (c)
|
switch (c)
|
||||||
{
|
{
|
||||||
|
@ -538,6 +538,10 @@ Foam::Istream& Foam::ISstream::read(token& t)
|
|||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Reset token, adjust its line number according to the stream
|
||||||
|
t.reset();
|
||||||
|
t.lineNumber(this->lineNumber());
|
||||||
|
|
||||||
// Assume that the streams supplied are in working order.
|
// Assume that the streams supplied are in working order.
|
||||||
// Lines are counted by '\n'
|
// Lines are counted by '\n'
|
||||||
|
|
||||||
@ -546,9 +550,6 @@ Foam::Istream& Foam::ISstream::read(token& t)
|
|||||||
|
|
||||||
char c = nextValid();
|
char c = nextValid();
|
||||||
|
|
||||||
// Set the line number of this token to the current stream line number
|
|
||||||
t.lineNumber(this->lineNumber());
|
|
||||||
|
|
||||||
// Return on error
|
// Return on error
|
||||||
if (!c)
|
if (!c)
|
||||||
{
|
{
|
||||||
|
@ -510,6 +510,9 @@ public:
|
|||||||
//- Token is COMPOUND
|
//- Token is COMPOUND
|
||||||
inline bool isCompound() const noexcept;
|
inline bool isCompound() const noexcept;
|
||||||
|
|
||||||
|
//- True if token is not UNDEFINED or ERROR. Same as good().
|
||||||
|
explicit operator bool() const noexcept { return good(); }
|
||||||
|
|
||||||
|
|
||||||
// Access
|
// Access
|
||||||
|
|
||||||
@ -690,6 +693,7 @@ public:
|
|||||||
void operator=(string*) = delete;
|
void operator=(string*) = delete;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
// IOstream Operators
|
// IOstream Operators
|
||||||
|
Loading…
Reference in New Issue
Block a user