Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
M
mpd
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Иван Мажукин
mpd
Commits
a057b4f6
Commit
a057b4f6
authored
Jun 03, 2017
by
Max Kellermann
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
*: add lost of "noexcept" specifications
parent
62b03cfd
Hide whitespace changes
Inline
Side-by-side
Showing
65 changed files
with
246 additions
and
241 deletions
+246
-241
AudioFormat.hxx
src/AudioFormat.hxx
+1
-1
DetachedSong.hxx
src/DetachedSong.hxx
+3
-3
MixRampInfo.hxx
src/MixRampInfo.hxx
+8
-8
MusicBuffer.hxx
src/MusicBuffer.hxx
+1
-1
MusicPipe.cxx
src/MusicPipe.cxx
+3
-3
MusicPipe.hxx
src/MusicPipe.hxx
+7
-7
Client.hxx
src/client/Client.hxx
+1
-1
Block.hxx
src/config/Block.hxx
+2
-2
Helpers.cxx
src/db/Helpers.cxx
+1
-1
Interface.hxx
src/db/Interface.hxx
+1
-1
LightDirectory.hxx
src/db/LightDirectory.hxx
+3
-3
PlaylistInfo.hxx
src/db/PlaylistInfo.hxx
+1
-1
ProxyDatabasePlugin.cxx
src/db/plugins/ProxyDatabasePlugin.cxx
+1
-1
Directory.hxx
src/db/plugins/simple/Directory.hxx
+1
-1
SimpleDatabasePlugin.hxx
src/db/plugins/simple/SimpleDatabasePlugin.hxx
+2
-2
Object.hxx
src/db/plugins/upnp/Object.hxx
+3
-3
UpnpDatabasePlugin.cxx
src/db/plugins/upnp/UpnpDatabasePlugin.cxx
+1
-1
ExcludeList.cxx
src/db/update/ExcludeList.cxx
+2
-2
ExcludeList.hxx
src/db/update/ExcludeList.hxx
+3
-3
Bridge.cxx
src/decoder/Bridge.cxx
+3
-3
Bridge.hxx
src/decoder/Bridge.hxx
+3
-3
Client.hxx
src/decoder/Client.hxx
+3
-3
DecoderBuffer.hxx
src/decoder/DecoderBuffer.hxx
+5
-5
DecoderControl.hxx
src/decoder/DecoderControl.hxx
+5
-5
FlacMetadata.hxx
src/decoder/plugins/FlacMetadata.hxx
+11
-9
OpusDecoderPlugin.cxx
src/decoder/plugins/OpusDecoderPlugin.cxx
+2
-2
Loop.hxx
src/event/Loop.hxx
+3
-3
AllocatedPath.hxx
src/fs/AllocatedPath.hxx
+21
-18
Glob.hxx
src/fs/Glob.hxx
+1
-1
Path.hxx
src/fs/Path.hxx
+3
-3
Traits.hxx
src/fs/Traits.hxx
+12
-12
BufferedReader.cxx
src/fs/io/BufferedReader.cxx
+1
-1
BufferedReader.hxx
src/fs/io/BufferedReader.hxx
+5
-5
AsyncInputStream.cxx
src/input/AsyncInputStream.cxx
+7
-7
AsyncInputStream.hxx
src/input/AsyncInputStream.hxx
+15
-15
InputStream.hxx
src/input/InputStream.hxx
+9
-9
Global.cxx
src/lib/curl/Global.cxx
+3
-3
Connection.hxx
src/lib/nfs/Connection.hxx
+3
-3
ContentDirectoryService.hxx
src/lib/upnp/ContentDirectoryService.hxx
+2
-2
SmbclientNeighborPlugin.cxx
src/neighbor/plugins/SmbclientNeighborPlugin.cxx
+2
-2
UpnpNeighborPlugin.cxx
src/neighbor/plugins/UpnpNeighborPlugin.cxx
+2
-2
AllocatedSocketAddress.hxx
src/net/AllocatedSocketAddress.hxx
+12
-12
StaticSocketAddress.hxx
src/net/StaticSocketAddress.hxx
+11
-11
MultipleOutputs.hxx
src/output/MultipleOutputs.hxx
+2
-2
AlsaOutputPlugin.cxx
src/output/plugins/AlsaOutputPlugin.cxx
+1
-1
OpenALOutputPlugin.cxx
src/output/plugins/OpenALOutputPlugin.cxx
+3
-3
RecorderOutputPlugin.cxx
src/output/plugins/RecorderOutputPlugin.cxx
+1
-1
HttpdInternal.hxx
src/output/plugins/httpd/HttpdInternal.hxx
+2
-2
Thread.cxx
src/player/Thread.cxx
+2
-2
Queue.hxx
src/queue/Queue.hxx
+3
-3
CompositeStorage.cxx
src/storage/CompositeStorage.cxx
+2
-2
CompositeStorage.hxx
src/storage/CompositeStorage.hxx
+3
-3
CurlStorage.cxx
src/storage/plugins/CurlStorage.cxx
+1
-1
MixRamp.cxx
src/tag/MixRamp.cxx
+2
-2
ReplayGain.cxx
src/tag/ReplayGain.cxx
+2
-2
Set.cxx
src/tag/Set.cxx
+3
-3
Set.hxx
src/tag/Set.hxx
+4
-4
TagBuilder.hxx
src/tag/TagBuilder.hxx
+1
-1
Id.hxx
src/thread/Id.hxx
+3
-3
Thread.hxx
src/thread/Thread.hxx
+1
-1
ConstBuffer.hxx
src/util/ConstBuffer.hxx
+1
-1
StringView.cxx
src/util/StringView.cxx
+2
-2
StringView.hxx
src/util/StringView.hxx
+12
-12
FakeDecoderAPI.cxx
test/FakeDecoderAPI.cxx
+3
-3
FakeDecoderAPI.hxx
test/FakeDecoderAPI.hxx
+3
-3
No files found.
src/AudioFormat.hxx
View file @
a057b4f6
...
...
@@ -127,7 +127,7 @@ struct AudioFormat {
void
ApplyMask
(
AudioFormat
mask
)
noexcept
;
gcc_pure
AudioFormat
WithMask
(
AudioFormat
mask
)
const
{
AudioFormat
WithMask
(
AudioFormat
mask
)
const
noexcept
{
AudioFormat
result
=
*
this
;
result
.
ApplyMask
(
mask
);
return
result
;
...
...
src/DetachedSong.hxx
View file @
a057b4f6
...
...
@@ -152,7 +152,7 @@ public:
bool
IsRemote
()
const
noexcept
;
gcc_pure
bool
IsFile
()
const
{
bool
IsFile
()
const
noexcept
{
return
!
IsRemote
();
}
...
...
@@ -162,11 +162,11 @@ public:
gcc_pure
bool
IsInDatabase
()
const
noexcept
;
const
Tag
&
GetTag
()
const
{
const
Tag
&
GetTag
()
const
noexcept
{
return
tag
;
}
Tag
&
WritableTag
()
{
Tag
&
WritableTag
()
noexcept
{
return
tag
;
}
...
...
src/MixRampInfo.hxx
View file @
a057b4f6
...
...
@@ -31,45 +31,45 @@ class MixRampInfo {
public
:
MixRampInfo
()
=
default
;
void
Clear
()
{
void
Clear
()
noexcept
{
start
.
clear
();
end
.
clear
();
}
gcc_pure
bool
IsDefined
()
const
{
bool
IsDefined
()
const
noexcept
{
return
!
start
.
empty
()
||
!
end
.
empty
();
}
gcc_pure
const
char
*
GetStart
()
const
{
const
char
*
GetStart
()
const
noexcept
{
return
start
.
empty
()
?
nullptr
:
start
.
c_str
();
}
gcc_pure
const
char
*
GetEnd
()
const
{
const
char
*
GetEnd
()
const
noexcept
{
return
end
.
empty
()
?
nullptr
:
end
.
c_str
();
}
void
SetStart
(
const
char
*
new_value
)
{
void
SetStart
(
const
char
*
new_value
)
noexcept
{
if
(
new_value
==
nullptr
)
start
.
clear
();
else
start
=
new_value
;
}
void
SetStart
(
std
::
string
&&
new_value
)
{
void
SetStart
(
std
::
string
&&
new_value
)
noexcept
{
start
=
std
::
move
(
new_value
);
}
void
SetEnd
(
const
char
*
new_value
)
{
void
SetEnd
(
const
char
*
new_value
)
noexcept
{
if
(
new_value
==
nullptr
)
end
.
clear
();
else
end
=
new_value
;
}
void
SetEnd
(
std
::
string
&&
new_value
)
{
void
SetEnd
(
std
::
string
&&
new_value
)
noexcept
{
end
=
std
::
move
(
new_value
);
}
};
...
...
src/MusicBuffer.hxx
View file @
a057b4f6
...
...
@@ -60,7 +60,7 @@ public:
* music_buffer_new().
*/
gcc_pure
unsigned
GetSize
()
const
{
unsigned
GetSize
()
const
noexcept
{
return
buffer
.
GetCapacity
();
}
...
...
src/MusicPipe.cxx
View file @
a057b4f6
...
...
@@ -39,7 +39,7 @@ MusicPipe::Contains(const MusicChunk *chunk) const noexcept
#endif
MusicChunk
*
MusicPipe
::
Shift
()
MusicPipe
::
Shift
()
noexcept
{
const
std
::
lock_guard
<
Mutex
>
protect
(
mutex
);
...
...
@@ -73,7 +73,7 @@ MusicPipe::Shift()
}
void
MusicPipe
::
Clear
(
MusicBuffer
&
buffer
)
MusicPipe
::
Clear
(
MusicBuffer
&
buffer
)
noexcept
{
MusicChunk
*
chunk
;
...
...
@@ -82,7 +82,7 @@ MusicPipe::Clear(MusicBuffer &buffer)
}
void
MusicPipe
::
Push
(
MusicChunk
*
chunk
)
MusicPipe
::
Push
(
MusicChunk
*
chunk
)
noexcept
{
assert
(
!
chunk
->
IsEmpty
());
assert
(
chunk
->
length
==
0
||
chunk
->
audio_format
.
IsValid
());
...
...
src/MusicPipe.hxx
View file @
a057b4f6
...
...
@@ -77,7 +77,7 @@ public:
* audio_format.
*/
gcc_pure
bool
CheckFormat
(
AudioFormat
other
)
const
{
bool
CheckFormat
(
AudioFormat
other
)
const
noexcept
{
return
!
audio_format
.
IsDefined
()
||
audio_format
==
other
;
}
...
...
@@ -94,37 +94,37 @@ public:
* nullptr if the pipe is empty.
*/
gcc_pure
const
MusicChunk
*
Peek
()
const
{
const
MusicChunk
*
Peek
()
const
noexcept
{
return
head
;
}
/**
* Removes the first chunk from the head, and returns it.
*/
MusicChunk
*
Shift
();
MusicChunk
*
Shift
()
noexcept
;
/**
* Clears the whole pipe and returns the chunks to the buffer.
*
* @param buffer the buffer object to return the chunks to
*/
void
Clear
(
MusicBuffer
&
buffer
);
void
Clear
(
MusicBuffer
&
buffer
)
noexcept
;
/**
* Pushes a chunk to the tail of the pipe.
*/
void
Push
(
MusicChunk
*
chunk
);
void
Push
(
MusicChunk
*
chunk
)
noexcept
;
/**
* Returns the number of chunks currently in this pipe.
*/
gcc_pure
unsigned
GetSize
()
const
{
unsigned
GetSize
()
const
noexcept
{
return
size
;
}
gcc_pure
bool
IsEmpty
()
const
{
bool
IsEmpty
()
const
noexcept
{
return
GetSize
()
==
0
;
}
};
...
...
src/client/Client.hxx
View file @
a057b4f6
...
...
@@ -100,7 +100,7 @@ public:
}
gcc_pure
bool
IsExpired
()
const
{
bool
IsExpired
()
const
noexcept
{
return
!
FullyBufferedSocket
::
IsDefined
();
}
...
...
src/config/Block.hxx
View file @
a057b4f6
...
...
@@ -82,12 +82,12 @@ struct ConfigBlock {
* object that was synthesized and not loaded from a
* configuration file.
*/
bool
IsNull
()
const
{
bool
IsNull
()
const
noexcept
{
return
line
<
0
;
}
gcc_pure
bool
IsEmpty
()
const
{
bool
IsEmpty
()
const
noexcept
{
return
block_params
.
empty
();
}
...
...
src/db/Helpers.cxx
View file @
a057b4f6
...
...
@@ -29,7 +29,7 @@
struct
StringLess
{
gcc_pure
bool
operator
()(
const
char
*
a
,
const
char
*
b
)
const
{
bool
operator
()(
const
char
*
a
,
const
char
*
b
)
const
noexcept
{
return
strcmp
(
a
,
b
)
<
0
;
}
};
...
...
src/db/Interface.hxx
View file @
a057b4f6
...
...
@@ -126,7 +126,7 @@ public:
* Returns 0 if that is not not known/available.
*/
gcc_pure
virtual
time_t
GetUpdateStamp
()
const
=
0
;
virtual
time_t
GetUpdateStamp
()
const
noexcept
=
0
;
};
#endif
src/db/LightDirectory.hxx
View file @
a057b4f6
...
...
@@ -44,16 +44,16 @@ struct LightDirectory {
constexpr
LightDirectory
(
const
char
*
_uri
,
time_t
_mtime
)
:
uri
(
_uri
),
mtime
(
_mtime
)
{}
static
constexpr
LightDirectory
Root
()
{
static
constexpr
LightDirectory
Root
()
noexcept
{
return
LightDirectory
(
""
,
0
);
}
bool
IsRoot
()
const
{
bool
IsRoot
()
const
noexcept
{
return
*
uri
==
0
;
}
gcc_pure
const
char
*
GetPath
()
const
{
const
char
*
GetPath
()
const
noexcept
{
return
uri
;
}
};
...
...
src/db/PlaylistInfo.hxx
View file @
a057b4f6
...
...
@@ -45,7 +45,7 @@ struct PlaylistInfo {
constexpr
CompareName
(
const
char
*
_name
)
:
name
(
_name
)
{}
gcc_pure
bool
operator
()(
const
PlaylistInfo
&
pi
)
const
{
bool
operator
()(
const
PlaylistInfo
&
pi
)
const
noexcept
{
return
pi
.
name
.
compare
(
name
)
==
0
;
}
};
...
...
src/db/plugins/ProxyDatabasePlugin.cxx
View file @
a057b4f6
...
...
@@ -127,7 +127,7 @@ public:
unsigned
Update
(
const
char
*
uri_utf8
,
bool
discard
)
override
;
time_t
GetUpdateStamp
()
const
override
{
time_t
GetUpdateStamp
()
const
noexcept
override
{
return
update_stamp
;
}
...
...
src/db/plugins/simple/Directory.hxx
View file @
a057b4f6
...
...
@@ -187,7 +187,7 @@ public:
}
gcc_pure
const
char
*
GetPath
()
const
{
const
char
*
GetPath
()
const
noexcept
{
return
path
.
c_str
();
}
...
...
src/db/plugins/simple/SimpleDatabasePlugin.hxx
View file @
a057b4f6
...
...
@@ -76,7 +76,7 @@ public:
const
ConfigBlock
&
block
);
gcc_pure
Directory
&
GetRoot
()
{
Directory
&
GetRoot
()
noexcept
{
assert
(
root
!=
NULL
);
return
*
root
;
...
...
@@ -125,7 +125,7 @@ public:
DatabaseStats
GetStats
(
const
DatabaseSelection
&
selection
)
const
override
;
time_t
GetUpdateStamp
()
const
override
{
time_t
GetUpdateStamp
()
const
noexcept
override
{
return
mtime
;
}
...
...
src/db/plugins/upnp/Object.hxx
View file @
a057b4f6
...
...
@@ -60,7 +60,7 @@ public:
* Parent's ObjectId
*/
std
::
string
parent_id
;
std
::
string
url
;
/**
...
...
@@ -80,7 +80,7 @@ public:
UPnPDirObject
&
operator
=
(
UPnPDirObject
&&
)
=
default
;
void
Clear
()
{
void
Clear
()
noexcept
{
id
.
clear
();
parent_id
.
clear
();
url
.
clear
();
...
...
@@ -90,7 +90,7 @@ public:
}
gcc_pure
bool
Check
()
const
{
bool
Check
()
const
noexcept
{
return
!
id
.
empty
()
&&
!
parent_id
.
empty
()
&&
!
name
.
empty
()
&&
(
type
!=
UPnPDirObject
::
Type
::
ITEM
||
item_class
!=
UPnPDirObject
::
ItemClass
::
UNKNOWN
);
...
...
src/db/plugins/upnp/UpnpDatabasePlugin.cxx
View file @
a057b4f6
...
...
@@ -93,7 +93,7 @@ public:
DatabaseStats
GetStats
(
const
DatabaseSelection
&
selection
)
const
override
;
time_t
GetUpdateStamp
()
const
override
{
time_t
GetUpdateStamp
()
const
noexcept
override
{
return
0
;
}
...
...
src/db/update/ExcludeList.cxx
View file @
a057b4f6
...
...
@@ -36,7 +36,7 @@
#include <string.h>
bool
ExcludeList
::
LoadFile
(
Path
path_fs
)
ExcludeList
::
LoadFile
(
Path
path_fs
)
noexcept
try
{
#ifdef HAVE_CLASS_GLOB
TextFile
file
(
path_fs
);
...
...
@@ -67,7 +67,7 @@ try {
}
bool
ExcludeList
::
Check
(
Path
name_fs
)
const
ExcludeList
::
Check
(
Path
name_fs
)
const
noexcept
{
assert
(
!
name_fs
.
IsNull
());
...
...
src/db/update/ExcludeList.hxx
View file @
a057b4f6
...
...
@@ -50,7 +50,7 @@ public:
:
parent
(
&
_parent
)
{}
gcc_pure
bool
IsEmpty
()
const
{
bool
IsEmpty
()
const
noexcept
{
#ifdef HAVE_CLASS_GLOB
return
((
parent
==
nullptr
)
||
parent
->
IsEmpty
())
&&
patterns
.
empty
();
#else
...
...
@@ -62,13 +62,13 @@ public:
/**
* Loads and parses a .mpdignore file.
*/
bool
LoadFile
(
Path
path_fs
);
bool
LoadFile
(
Path
path_fs
)
noexcept
;
/**
* Checks whether one of the patterns in the .mpdignore file matches
* the specified file name.
*/
bool
Check
(
Path
name_fs
)
const
;
bool
Check
(
Path
name_fs
)
const
noexcept
;
};
...
...
src/decoder/Bridge.cxx
View file @
a057b4f6
...
...
@@ -277,7 +277,7 @@ DecoderBridge::Ready(const AudioFormat audio_format,
}
DecoderCommand
DecoderBridge
::
GetCommand
()
DecoderBridge
::
GetCommand
()
noexcept
{
return
LockGetVirtualCommand
();
}
...
...
@@ -326,7 +326,7 @@ DecoderBridge::CommandFinished()
}
SongTime
DecoderBridge
::
GetSeekTime
()
DecoderBridge
::
GetSeekTime
()
noexcept
{
assert
(
dc
.
pipe
!=
nullptr
);
...
...
@@ -341,7 +341,7 @@ DecoderBridge::GetSeekTime()
}
uint64_t
DecoderBridge
::
GetSeekFrame
()
DecoderBridge
::
GetSeekFrame
()
noexcept
{
return
GetSeekTime
().
ToScale
<
uint64_t
>
(
dc
.
in_audio_format
.
sample_rate
);
}
...
...
src/decoder/Bridge.hxx
View file @
a057b4f6
...
...
@@ -134,10 +134,10 @@ public:
/* virtual methods from DecoderClient */
void
Ready
(
AudioFormat
audio_format
,
bool
seekable
,
SignedSongTime
duration
)
override
;
DecoderCommand
GetCommand
()
override
;
DecoderCommand
GetCommand
()
noexcept
override
;
void
CommandFinished
()
override
;
SongTime
GetSeekTime
()
override
;
uint64_t
GetSeekFrame
()
override
;
SongTime
GetSeekTime
()
noexcept
override
;
uint64_t
GetSeekFrame
()
noexcept
override
;
void
SeekError
()
override
;
InputStreamPtr
OpenUri
(
const
char
*
uri
)
override
;
size_t
Read
(
InputStream
&
is
,
void
*
buffer
,
size_t
length
)
override
;
...
...
src/decoder/Client.hxx
View file @
a057b4f6
...
...
@@ -58,7 +58,7 @@ public:
* command pending
*/
gcc_pure
virtual
DecoderCommand
GetCommand
()
=
0
;
virtual
DecoderCommand
GetCommand
()
noexcept
=
0
;
/**
* Called by the decoder when it has performed the requested command
...
...
@@ -73,7 +73,7 @@ public:
* @return the destination position for the seek in milliseconds
*/
gcc_pure
virtual
SongTime
GetSeekTime
()
=
0
;
virtual
SongTime
GetSeekTime
()
noexcept
=
0
;
/**
* Call this when you have received the DecoderCommand::SEEK command.
...
...
@@ -81,7 +81,7 @@ public:
* @return the destination position for the seek in frames
*/
gcc_pure
virtual
uint64_t
GetSeekFrame
()
=
0
;
virtual
uint64_t
GetSeekFrame
()
noexcept
=
0
;
/**
* Call this instead of CommandFinished() when seeking has
...
...
src/decoder/DecoderBuffer.hxx
View file @
a057b4f6
...
...
@@ -54,11 +54,11 @@ public:
size_t
_size
)
:
client
(
_client
),
is
(
_is
),
buffer
(
_size
)
{}
const
InputStream
&
GetStream
()
const
{
const
InputStream
&
GetStream
()
const
noexcept
{
return
is
;
}
void
Clear
()
{
void
Clear
()
noexcept
{
buffer
.
Clear
();
}
...
...
@@ -75,7 +75,7 @@ public:
* How many bytes are stored in the buffer?
*/
gcc_pure
size_t
GetAvailable
()
const
{
size_t
GetAvailable
()
const
noexcept
{
return
buffer
.
GetAvailable
();
}
...
...
@@ -84,7 +84,7 @@ public:
* you have to call Consume() to do that. The returned buffer
* becomes invalid after a Fill() or a Consume() call.
*/
ConstBuffer
<
void
>
Read
()
const
{
ConstBuffer
<
void
>
Read
()
const
noexcept
{
auto
r
=
buffer
.
Read
();
return
{
r
.
data
,
r
.
size
};
}
...
...
@@ -102,7 +102,7 @@ public:
*
* @param nbytes the number of bytes to consume
*/
void
Consume
(
size_t
nbytes
)
{
void
Consume
(
size_t
nbytes
)
noexcept
{
buffer
.
Consume
(
nbytes
);
}
...
...
src/decoder/DecoderControl.hxx
View file @
a057b4f6
...
...
@@ -227,29 +227,29 @@ struct DecoderControl {
}
gcc_pure
bool
LockIsIdle
()
const
{
bool
LockIsIdle
()
const
noexcept
{
const
std
::
lock_guard
<
Mutex
>
protect
(
mutex
);
return
IsIdle
();
}
bool
IsStarting
()
const
{
bool
IsStarting
()
const
noexcept
{
return
state
==
DecoderState
::
START
;
}
gcc_pure
bool
LockIsStarting
()
const
{
bool
LockIsStarting
()
const
noexcept
{
const
std
::
lock_guard
<
Mutex
>
protect
(
mutex
);
return
IsStarting
();
}
bool
HasFailed
()
const
{
bool
HasFailed
()
const
noexcept
{
assert
(
command
==
DecoderCommand
::
NONE
);
return
state
==
DecoderState
::
ERROR
;
}
gcc_pure
bool
LockHasFailed
()
const
{
bool
LockHasFailed
()
const
noexcept
{
const
std
::
lock_guard
<
Mutex
>
protect
(
mutex
);
return
HasFailed
();
}
...
...
src/decoder/plugins/FlacMetadata.hxx
View file @
a057b4f6
...
...
@@ -42,25 +42,27 @@ public:
return
chain
;
}
bool
Read
(
const
char
*
path
)
{
bool
Read
(
const
char
*
path
)
noexcept
{
return
::
FLAC__metadata_chain_read
(
chain
,
path
);
}
bool
Read
(
FLAC__IOHandle
handle
,
FLAC__IOCallbacks
callbacks
)
{
bool
Read
(
FLAC__IOHandle
handle
,
FLAC__IOCallbacks
callbacks
)
noexcept
{
return
::
FLAC__metadata_chain_read_with_callbacks
(
chain
,
handle
,
callbacks
);
}
bool
Read
(
InputStream
&
is
)
{
bool
Read
(
InputStream
&
is
)
noexcept
{
return
Read
(
::
ToFlacIOHandle
(
is
),
::
GetFlacIOCallbacks
(
is
));
}
bool
ReadOgg
(
const
char
*
path
)
{
bool
ReadOgg
(
const
char
*
path
)
noexcept
{
return
::
FLAC__metadata_chain_read_ogg
(
chain
,
path
);
}
bool
ReadOgg
(
FLAC__IOHandle
handle
,
FLAC__IOCallbacks
callbacks
)
{
bool
ReadOgg
(
FLAC__IOHandle
handle
,
FLAC__IOCallbacks
callbacks
)
noexcept
{
return
::
FLAC__metadata_chain_read_ogg_with_callbacks
(
chain
,
handle
,
callbacks
);
...
...
@@ -71,12 +73,12 @@ public:
}
gcc_pure
FLAC__Metadata_ChainStatus
GetStatus
()
const
{
FLAC__Metadata_ChainStatus
GetStatus
()
const
noexcept
{
return
::
FLAC__metadata_chain_status
(
chain
);
}
gcc_pure
const
char
*
GetStatusString
()
const
{
const
char
*
GetStatusString
()
const
noexcept
{
return
FLAC__Metadata_ChainStatusString
[
GetStatus
()];
}
...
...
@@ -99,12 +101,12 @@ public:
::
FLAC__metadata_iterator_delete
(
iterator
);
}
bool
Next
()
{
bool
Next
()
noexcept
{
return
::
FLAC__metadata_iterator_next
(
iterator
);
}
gcc_pure
FLAC__StreamMetadata
*
GetBlock
()
{
FLAC__StreamMetadata
*
GetBlock
()
noexcept
{
return
::
FLAC__metadata_iterator_get_block
(
iterator
);
}
};
...
...
src/decoder/plugins/OpusDecoderPlugin.cxx
View file @
a057b4f6
...
...
@@ -52,14 +52,14 @@ static constexpr unsigned opus_output_buffer_frames = opus_sample_rate / 4;
gcc_pure
static
bool
IsOpusHead
(
const
ogg_packet
&
packet
)
IsOpusHead
(
const
ogg_packet
&
packet
)
noexcept
{
return
packet
.
bytes
>=
8
&&
memcmp
(
packet
.
packet
,
"OpusHead"
,
8
)
==
0
;
}
gcc_pure
static
bool
IsOpusTags
(
const
ogg_packet
&
packet
)
IsOpusTags
(
const
ogg_packet
&
packet
)
noexcept
{
return
packet
.
bytes
>=
8
&&
memcmp
(
packet
.
packet
,
"OpusTags"
,
8
)
==
0
;
}
...
...
src/event/Loop.hxx
View file @
a057b4f6
...
...
@@ -199,7 +199,7 @@ public:
* Are we currently running inside this EventLoop's thread?
*/
gcc_pure
bool
IsInside
()
const
{
bool
IsInside
()
const
noexcept
{
assert
(
!
thread
.
IsNull
());
return
thread
.
IsInside
();
...
...
@@ -207,7 +207,7 @@ public:
#ifndef NDEBUG
gcc_pure
bool
IsInsideOrVirgin
()
const
{
bool
IsInsideOrVirgin
()
const
noexcept
{
return
virgin
||
IsInside
();
}
#endif
...
...
@@ -219,7 +219,7 @@ public:
* are not yet/anymore handled.
*/
gcc_pure
bool
IsInsideOrNull
()
const
{
bool
IsInsideOrNull
()
const
noexcept
{
return
thread
.
IsNull
()
||
thread
.
IsInside
();
}
};
...
...
src/fs/AllocatedPath.hxx
View file @
a057b4f6
...
...
@@ -77,12 +77,12 @@ public:
* @see IsNull()
*/
gcc_const
static
AllocatedPath
Null
()
{
static
AllocatedPath
Null
()
noexcept
{
return
AllocatedPath
(
nullptr
);
}
gcc_pure
operator
Path
()
const
{
operator
Path
()
const
noexcept
{
return
Path
::
FromFS
(
c_str
());
}
...
...
@@ -90,36 +90,39 @@ public:
* Join two path components with the path separator.
*/
gcc_pure
gcc_nonnull_all
static
AllocatedPath
Build
(
const_pointer_type
a
,
const_pointer_type
b
)
{
static
AllocatedPath
Build
(
const_pointer_type
a
,
const_pointer_type
b
)
noexcept
{
return
Build
(
a
,
PathTraitsFS
::
GetLength
(
a
),
b
,
PathTraitsFS
::
GetLength
(
b
));
}
gcc_pure
gcc_nonnull_all
static
AllocatedPath
Build
(
Path
a
,
const_pointer_type
b
)
{
static
AllocatedPath
Build
(
Path
a
,
const_pointer_type
b
)
noexcept
{
return
Build
(
a
.
c_str
(),
b
);
}
gcc_pure
gcc_nonnull_all
static
AllocatedPath
Build
(
Path
a
,
Path
b
)
{
static
AllocatedPath
Build
(
Path
a
,
Path
b
)
noexcept
{
return
Build
(
a
,
b
.
c_str
());
}
gcc_pure
gcc_nonnull_all
static
AllocatedPath
Build
(
const_pointer_type
a
,
const
AllocatedPath
&
b
)
{
static
AllocatedPath
Build
(
const_pointer_type
a
,
const
AllocatedPath
&
b
)
noexcept
{
return
Build
(
a
,
PathTraitsFS
::
GetLength
(
a
),
b
.
value
.
c_str
(),
b
.
value
.
size
());
}
gcc_pure
gcc_nonnull_all
static
AllocatedPath
Build
(
const
AllocatedPath
&
a
,
const_pointer_type
b
)
{
static
AllocatedPath
Build
(
const
AllocatedPath
&
a
,
const_pointer_type
b
)
noexcept
{
return
Build
(
a
.
value
.
c_str
(),
a
.
value
.
size
(),
b
,
PathTraitsFS
::
GetLength
(
b
));
}
gcc_pure
static
AllocatedPath
Build
(
const
AllocatedPath
&
a
,
const
AllocatedPath
&
b
)
{
const
AllocatedPath
&
b
)
noexcept
{
return
Build
(
a
.
value
.
c_str
(),
a
.
value
.
size
(),
b
.
value
.
c_str
(),
b
.
value
.
size
());
}
...
...
@@ -129,13 +132,13 @@ public:
* character set to a #Path instance.
*/
gcc_pure
static
AllocatedPath
FromFS
(
const_pointer_type
fs
)
{
static
AllocatedPath
FromFS
(
const_pointer_type
fs
)
noexcept
{
return
AllocatedPath
(
fs
);
}
gcc_pure
static
AllocatedPath
FromFS
(
const_pointer_type
_begin
,
const_pointer_type
_end
)
{
const_pointer_type
_end
)
noexcept
{
return
AllocatedPath
(
_begin
,
_end
);
}
...
...
@@ -144,7 +147,7 @@ public:
* character set to a #Path instance.
*/
gcc_pure
static
AllocatedPath
FromFS
(
string
&&
fs
)
{
static
AllocatedPath
FromFS
(
string
&&
fs
)
noexcept
{
return
AllocatedPath
(
std
::
move
(
fs
));
}
...
...
@@ -176,12 +179,12 @@ public:
}
gcc_pure
bool
operator
==
(
const
AllocatedPath
&
other
)
const
{
bool
operator
==
(
const
AllocatedPath
&
other
)
const
noexcept
{
return
value
==
other
.
value
;
}
gcc_pure
bool
operator
!=
(
const
AllocatedPath
&
other
)
const
{
bool
operator
!=
(
const
AllocatedPath
&
other
)
const
noexcept
{
return
value
!=
other
.
value
;
}
...
...
@@ -197,7 +200,7 @@ public:
* Check if this is a "nulled" instance. A "nulled" instance
* must not be used.
*/
bool
IsNull
()
const
{
bool
IsNull
()
const
noexcept
{
return
value
.
empty
();
}
...
...
@@ -206,7 +209,7 @@ public:
*
* @see IsNull()
*/
void
SetNull
()
{
void
SetNull
()
noexcept
{
value
.
clear
();
}
...
...
@@ -215,7 +218,7 @@ public:
* elements (which may not be the number of characters).
*/
gcc_pure
size_t
length
()
const
{
size_t
length
()
const
noexcept
{
return
value
.
length
();
}
...
...
@@ -225,7 +228,7 @@ public:
* instance ends.
*/
gcc_pure
const_pointer_type
c_str
()
const
{
const_pointer_type
c_str
()
const
noexcept
{
return
value
.
c_str
();
}
...
...
@@ -234,7 +237,7 @@ public:
* null-terminated.
*/
gcc_pure
const_pointer_type
data
()
const
{
const_pointer_type
data
()
const
noexcept
{
return
value
.
data
();
}
...
...
src/fs/Glob.hxx
View file @
a057b4f6
...
...
@@ -54,7 +54,7 @@ public:
#endif
gcc_pure
bool
Check
(
const
char
*
name_fs
)
const
{
bool
Check
(
const
char
*
name_fs
)
const
noexcept
{
#ifdef HAVE_FNMATCH
return
fnmatch
(
pattern
.
c_str
(),
name_fs
,
0
)
==
0
;
#elif defined(WIN32)
...
...
src/fs/Path.hxx
View file @
a057b4f6
...
...
@@ -92,7 +92,7 @@ public:
* elements (which may not be the number of characters).
*/
gcc_pure
size_t
length
()
const
{
size_t
length
()
const
noexcept
{
assert
(
!
IsNull
());
return
PathTraitsFS
::
GetLength
(
c_str
());
...
...
@@ -104,7 +104,7 @@ public:
* instance ends.
*/
gcc_pure
const_pointer_type
c_str
()
const
{
const_pointer_type
c_str
()
const
noexcept
{
return
Base
::
c_str
();
}
...
...
@@ -113,7 +113,7 @@ public:
* null-terminated.
*/
gcc_pure
const_pointer_type
data
()
const
{
const_pointer_type
data
()
const
noexcept
{
return
c_str
();
}
...
...
src/fs/Traits.hxx
View file @
a057b4f6
...
...
@@ -63,7 +63,7 @@ struct PathTraitsFS {
static
constexpr
const_pointer_type
CURRENT_DIRECTORY
=
PATH_LITERAL
(
"."
);
static
constexpr
bool
IsSeparator
(
value_type
ch
)
{
static
constexpr
bool
IsSeparator
(
value_type
ch
)
noexcept
{
return
#ifdef WIN32
ch
==
'/'
||
...
...
@@ -72,7 +72,7 @@ struct PathTraitsFS {
}
gcc_pure
gcc_nonnull_all
static
const_pointer_type
FindLastSeparator
(
const_pointer_type
p
)
{
static
const_pointer_type
FindLastSeparator
(
const_pointer_type
p
)
noexcept
{
#if !CLANG_CHECK_VERSION(3,6)
/* disabled on clang due to -Wtautological-pointer-compare */
assert
(
p
!=
nullptr
);
...
...
@@ -90,13 +90,13 @@ struct PathTraitsFS {
#ifdef WIN32
gcc_pure
gcc_nonnull_all
static
constexpr
bool
IsDrive
(
const_pointer_type
p
)
{
static
constexpr
bool
IsDrive
(
const_pointer_type
p
)
noexcept
{
return
IsAlphaASCII
(
p
[
0
])
&&
p
[
1
]
==
':'
;
}
#endif
gcc_pure
gcc_nonnull_all
static
bool
IsAbsolute
(
const_pointer_type
p
)
{
static
bool
IsAbsolute
(
const_pointer_type
p
)
noexcept
{
#if !CLANG_CHECK_VERSION(3,6)
/* disabled on clang due to -Wtautological-pointer-compare */
assert
(
p
!=
nullptr
);
...
...
@@ -110,12 +110,12 @@ struct PathTraitsFS {
}
gcc_pure
gcc_nonnull_all
static
size_t
GetLength
(
const_pointer_type
p
)
{
static
size_t
GetLength
(
const_pointer_type
p
)
noexcept
{
return
StringLength
(
p
);
}
gcc_pure
gcc_nonnull_all
static
const_pointer_type
Find
(
const_pointer_type
p
,
value_type
ch
)
{
static
const_pointer_type
Find
(
const_pointer_type
p
,
value_type
ch
)
noexcept
{
return
StringFind
(
p
,
ch
);
}
...
...
@@ -179,7 +179,7 @@ struct PathTraitsUTF8 {
}
gcc_pure
gcc_nonnull_all
static
const_pointer_type
FindLastSeparator
(
const_pointer_type
p
)
{
static
const_pointer_type
FindLastSeparator
(
const_pointer_type
p
)
noexcept
{
#if !CLANG_CHECK_VERSION(3,6)
/* disabled on clang due to -Wtautological-pointer-compare */
assert
(
p
!=
nullptr
);
...
...
@@ -190,13 +190,13 @@ struct PathTraitsUTF8 {
#ifdef WIN32
gcc_pure
gcc_nonnull_all
static
constexpr
bool
IsDrive
(
const_pointer_type
p
)
{
static
constexpr
bool
IsDrive
(
const_pointer_type
p
)
noexcept
{
return
IsAlphaASCII
(
p
[
0
])
&&
p
[
1
]
==
':'
;
}
#endif
gcc_pure
gcc_nonnull_all
static
bool
IsAbsolute
(
const_pointer_type
p
)
{
static
bool
IsAbsolute
(
const_pointer_type
p
)
noexcept
{
#if !CLANG_CHECK_VERSION(3,6)
/* disabled on clang due to -Wtautological-pointer-compare */
assert
(
p
!=
nullptr
);
...
...
@@ -210,12 +210,12 @@ struct PathTraitsUTF8 {
}
gcc_pure
gcc_nonnull_all
static
size_t
GetLength
(
const_pointer_type
p
)
{
static
size_t
GetLength
(
const_pointer_type
p
)
noexcept
{
return
StringLength
(
p
);
}
gcc_pure
gcc_nonnull_all
static
const_pointer_type
Find
(
const_pointer_type
p
,
value_type
ch
)
{
static
const_pointer_type
Find
(
const_pointer_type
p
,
value_type
ch
)
noexcept
{
return
StringFind
(
p
,
ch
);
}
...
...
@@ -255,7 +255,7 @@ struct PathTraitsUTF8 {
const_pointer_type
b
,
size_t
b_size
)
noexcept
;
gcc_pure
gcc_nonnull_all
static
string
Build
(
const_pointer_type
a
,
const_pointer_type
b
)
{
static
string
Build
(
const_pointer_type
a
,
const_pointer_type
b
)
noexcept
{
return
Build
(
a
,
GetLength
(
a
),
b
,
GetLength
(
b
));
}
};
...
...
src/fs/io/BufferedReader.cxx
View file @
a057b4f6
...
...
@@ -67,7 +67,7 @@ BufferedReader::ReadFull(size_t size)
}
size_t
BufferedReader
::
ReadFromBuffer
(
WritableBuffer
<
void
>
dest
)
BufferedReader
::
ReadFromBuffer
(
WritableBuffer
<
void
>
dest
)
noexcept
{
auto
src
=
Read
();
size_t
nbytes
=
std
::
min
(
src
.
size
,
dest
.
size
);
...
...
src/fs/io/BufferedReader.hxx
View file @
a057b4f6
...
...
@@ -47,7 +47,7 @@ public:
* Reset the internal state. Should be called after rewinding
* the underlying #Reader.
*/
void
Reset
()
{
void
Reset
()
noexcept
{
buffer
.
Clear
();
eof
=
false
;
line_number
=
0
;
...
...
@@ -56,7 +56,7 @@ public:
bool
Fill
(
bool
need_more
);
gcc_pure
WritableBuffer
<
void
>
Read
()
const
{
WritableBuffer
<
void
>
Read
()
const
noexcept
{
return
buffer
.
Read
().
ToVoid
();
}
...
...
@@ -67,7 +67,7 @@ public:
*/
void
*
ReadFull
(
size_t
size
);
void
Consume
(
size_t
n
)
{
void
Consume
(
size_t
n
)
noexcept
{
buffer
.
Consume
(
n
);
}
...
...
@@ -75,7 +75,7 @@ public:
* Read (and consume) data from the input buffer into the
* given buffer. Does not attempt to refill the buffer.
*/
size_t
ReadFromBuffer
(
WritableBuffer
<
void
>
dest
);
size_t
ReadFromBuffer
(
WritableBuffer
<
void
>
dest
)
noexcept
;
/**
* Read data into the given buffer and consume it from our
...
...
@@ -86,7 +86,7 @@ public:
char
*
ReadLine
();
unsigned
GetLineNumber
()
const
{
unsigned
GetLineNumber
()
const
noexcept
{
return
line_number
;
}
};
...
...
src/input/AsyncInputStream.cxx
View file @
a057b4f6
...
...
@@ -52,14 +52,14 @@ AsyncInputStream::~AsyncInputStream()
}
void
AsyncInputStream
::
SetTag
(
Tag
*
_tag
)
AsyncInputStream
::
SetTag
(
Tag
*
_tag
)
noexcept
{
delete
tag
;
tag
=
_tag
;
}
void
AsyncInputStream
::
Pause
()
AsyncInputStream
::
Pause
()
noexcept
{
assert
(
io_thread_inside
());
...
...
@@ -141,7 +141,7 @@ AsyncInputStream::Seek(offset_type new_offset)
}
void
AsyncInputStream
::
SeekDone
()
AsyncInputStream
::
SeekDone
()
noexcept
{
assert
(
io_thread_inside
());
assert
(
IsSeekPending
());
...
...
@@ -201,7 +201,7 @@ AsyncInputStream::Read(void *ptr, size_t read_size)
}
void
AsyncInputStream
::
CommitWriteBuffer
(
size_t
nbytes
)
AsyncInputStream
::
CommitWriteBuffer
(
size_t
nbytes
)
noexcept
{
buffer
.
Append
(
nbytes
);
...
...
@@ -212,7 +212,7 @@ AsyncInputStream::CommitWriteBuffer(size_t nbytes)
}
void
AsyncInputStream
::
AppendToBuffer
(
const
void
*
data
,
size_t
append_size
)
AsyncInputStream
::
AppendToBuffer
(
const
void
*
data
,
size_t
append_size
)
noexcept
{
auto
w
=
buffer
.
Write
();
assert
(
!
w
.
IsEmpty
());
...
...
@@ -238,7 +238,7 @@ AsyncInputStream::AppendToBuffer(const void *data, size_t append_size)
}
void
AsyncInputStream
::
DeferredResume
()
AsyncInputStream
::
DeferredResume
()
noexcept
{
const
std
::
lock_guard
<
Mutex
>
protect
(
mutex
);
...
...
@@ -251,7 +251,7 @@ AsyncInputStream::DeferredResume()
}
void
AsyncInputStream
::
DeferredSeek
()
AsyncInputStream
::
DeferredSeek
()
noexcept
{
const
std
::
lock_guard
<
Mutex
>
protect
(
mutex
);
if
(
seek_state
!=
SeekState
::
SCHEDULED
)
...
...
src/input/AsyncInputStream.hxx
View file @
a057b4f6
...
...
@@ -92,15 +92,15 @@ protected:
/**
* Pass an tag from the I/O thread to the client thread.
*/
void
SetTag
(
Tag
*
_tag
);
void
SetTag
(
Tag
*
_tag
)
noexcept
;
void
ClearTag
()
{
void
ClearTag
()
noexcept
{
SetTag
(
nullptr
);
}
void
Pause
();
void
Pause
()
noexcept
;
bool
IsPaused
()
const
{
bool
IsPaused
()
const
noexcept
{
return
paused
;
}
...
...
@@ -109,15 +109,15 @@ protected:
* continue feeding Read() calls from the buffer until it runs
* empty.
*/
void
SetClosed
()
{
void
SetClosed
()
noexcept
{
open
=
false
;
}
bool
IsBufferEmpty
()
const
{
bool
IsBufferEmpty
()
const
noexcept
{
return
buffer
.
IsEmpty
();
}
bool
IsBufferFull
()
const
{
bool
IsBufferFull
()
const
noexcept
{
return
buffer
.
IsFull
();
}
...
...
@@ -125,21 +125,21 @@ protected:
* Determine how many bytes can be added to the buffer.
*/
gcc_pure
size_t
GetBufferSpace
()
const
{
size_t
GetBufferSpace
()
const
noexcept
{
return
buffer
.
GetSpace
();
}
CircularBuffer
<
uint8_t
>::
Range
PrepareWriteBuffer
()
{
CircularBuffer
<
uint8_t
>::
Range
PrepareWriteBuffer
()
noexcept
{
return
buffer
.
Write
();
}
void
CommitWriteBuffer
(
size_t
nbytes
);
void
CommitWriteBuffer
(
size_t
nbytes
)
noexcept
;
/**
* Append data to the buffer. The size must fit into the
* buffer; see GetBufferSpace().
*/
void
AppendToBuffer
(
const
void
*
data
,
size_t
append_size
);
void
AppendToBuffer
(
const
void
*
data
,
size_t
append_size
)
noexcept
;
/**
* Implement code here that will resume the stream after it
...
...
@@ -154,7 +154,7 @@ protected:
*/
virtual
void
DoSeek
(
offset_type
new_offset
)
=
0
;
bool
IsSeekPending
()
const
{
bool
IsSeekPending
()
const
noexcept
{
return
seek_state
==
SeekState
::
PENDING
;
}
...
...
@@ -162,14 +162,14 @@ protected:
* Call this after seeking has finished. It will notify the
* client thread.
*/
void
SeekDone
();
void
SeekDone
()
noexcept
;
private
:
void
Resume
();
/* for DeferredCall */
void
DeferredResume
();
void
DeferredSeek
();
void
DeferredResume
()
noexcept
;
void
DeferredSeek
()
noexcept
;
};
#endif
src/input/InputStream.hxx
View file @
a057b4f6
...
...
@@ -184,20 +184,20 @@ public:
void
LockWaitReady
();
gcc_pure
bool
HasMimeType
()
const
{
bool
HasMimeType
()
const
noexcept
{
assert
(
ready
);
return
!
mime
.
empty
();
}
gcc_pure
const
char
*
GetMimeType
()
const
{
const
char
*
GetMimeType
()
const
noexcept
{
assert
(
ready
);
return
mime
.
empty
()
?
nullptr
:
mime
.
c_str
();
}
void
ClearMimeType
()
{
void
ClearMimeType
()
noexcept
{
mime
.
clear
();
}
...
...
@@ -215,35 +215,35 @@ public:
}
gcc_pure
bool
KnownSize
()
const
{
bool
KnownSize
()
const
noexcept
{
assert
(
ready
);
return
size
!=
UNKNOWN_SIZE
;
}
gcc_pure
offset_type
GetSize
()
const
{
offset_type
GetSize
()
const
noexcept
{
assert
(
ready
);
assert
(
KnownSize
());
return
size
;
}
void
AddOffset
(
offset_type
delta
)
{
void
AddOffset
(
offset_type
delta
)
noexcept
{
assert
(
ready
);
offset
+=
delta
;
}
gcc_pure
offset_type
GetOffset
()
const
{
offset_type
GetOffset
()
const
noexcept
{
assert
(
ready
);
return
offset
;
}
gcc_pure
offset_type
GetRest
()
const
{
offset_type
GetRest
()
const
noexcept
{
assert
(
ready
);
assert
(
KnownSize
());
...
...
@@ -251,7 +251,7 @@ public:
}
gcc_pure
bool
IsSeekable
()
const
{
bool
IsSeekable
()
const
noexcept
{
assert
(
ready
);
return
seekable
;
...
...
src/lib/curl/Global.cxx
View file @
a057b4f6
...
...
@@ -63,7 +63,7 @@ public:
*/
static
int
SocketFunction
(
CURL
*
easy
,
curl_socket_t
s
,
int
action
,
void
*
userp
,
void
*
socketp
);
void
*
userp
,
void
*
socketp
)
noexcept
;
virtual
bool
OnSocketReady
(
unsigned
flags
)
override
;
...
...
@@ -75,7 +75,7 @@ private:
}
gcc_const
static
unsigned
CurlPollToFlags
(
int
action
)
{
static
unsigned
CurlPollToFlags
(
int
action
)
noexcept
{
switch
(
action
)
{
case
CURL_POLL_NONE
:
return
0
;
...
...
@@ -108,7 +108,7 @@ CurlGlobal::CurlGlobal(EventLoop &_loop)
int
CurlSocket
::
SocketFunction
(
gcc_unused
CURL
*
easy
,
curl_socket_t
s
,
int
action
,
void
*
userp
,
void
*
socketp
)
{
void
*
userp
,
void
*
socketp
)
noexcept
{
auto
&
global
=
*
(
CurlGlobal
*
)
userp
;
CurlSocket
*
cs
=
(
CurlSocket
*
)
socketp
;
...
...
src/lib/nfs/Connection.hxx
View file @
a057b4f6
...
...
@@ -147,16 +147,16 @@ public:
~
NfsConnection
();
gcc_pure
const
char
*
GetServer
()
const
{
const
char
*
GetServer
()
const
noexcept
{
return
server
.
c_str
();
}
gcc_pure
const
char
*
GetExportName
()
const
{
const
char
*
GetExportName
()
const
noexcept
{
return
export_name
.
c_str
();
}
EventLoop
&
GetEventLoop
()
{
EventLoop
&
GetEventLoop
()
noexcept
{
return
SocketMonitor
::
GetEventLoop
();
}
...
...
src/lib/upnp/ContentDirectoryService.hxx
View file @
a057b4f6
...
...
@@ -114,12 +114,12 @@ public:
std
::
list
<
std
::
string
>
getSearchCapabilities
(
UpnpClient_Handle
handle
)
const
;
gcc_pure
std
::
string
GetURI
()
const
{
std
::
string
GetURI
()
const
noexcept
{
return
"upnp://"
+
m_deviceId
+
"/"
+
m_serviceType
;
}
/** Retrieve the "friendly name" for this server, useful for display. */
const
char
*
getFriendlyName
()
const
{
const
char
*
getFriendlyName
()
const
noexcept
{
return
m_friendlyName
.
c_str
();
}
};
...
...
src/neighbor/plugins/SmbclientNeighborPlugin.cxx
View file @
a057b4f6
...
...
@@ -48,12 +48,12 @@ class SmbclientNeighborExplorer final : public NeighborExplorer {
Server
(
const
Server
&
)
=
delete
;
gcc_pure
bool
operator
==
(
const
Server
&
other
)
const
{
bool
operator
==
(
const
Server
&
other
)
const
noexcept
{
return
name
==
other
.
name
;
}
gcc_pure
NeighborInfo
Export
()
const
{
NeighborInfo
Export
()
const
noexcept
{
return
{
"smb://"
+
name
+
"/"
,
comment
};
}
};
...
...
src/neighbor/plugins/UpnpNeighborPlugin.cxx
View file @
a057b4f6
...
...
@@ -43,12 +43,12 @@ class UpnpNeighborExplorer final
Server
(
const
Server
&
)
=
delete
;
gcc_pure
bool
operator
==
(
const
Server
&
other
)
const
{
bool
operator
==
(
const
Server
&
other
)
const
noexcept
{
return
name
==
other
.
name
;
}
gcc_pure
NeighborInfo
Export
()
const
{
NeighborInfo
Export
()
const
noexcept
{
return
{
"smb://"
+
name
+
"/"
,
comment
};
}
};
...
...
src/net/AllocatedSocketAddress.hxx
View file @
a057b4f6
...
...
@@ -76,47 +76,47 @@ public:
AllocatedSocketAddress
&
operator
=
(
const
AllocatedSocketAddress
&
)
=
delete
;
AllocatedSocketAddress
&
operator
=
(
AllocatedSocketAddress
&&
src
)
{
AllocatedSocketAddress
&
operator
=
(
AllocatedSocketAddress
&&
src
)
noexcept
{
std
::
swap
(
address
,
src
.
address
);
std
::
swap
(
size
,
src
.
size
);
return
*
this
;
}
gcc_pure
bool
operator
==
(
SocketAddress
other
)
const
{
bool
operator
==
(
SocketAddress
other
)
const
noexcept
{
return
(
SocketAddress
)
*
this
==
other
;
}
bool
operator
!=
(
SocketAddress
&
other
)
const
{
bool
operator
!=
(
SocketAddress
&
other
)
const
noexcept
{
return
!
(
*
this
==
other
);
}
gcc_const
static
AllocatedSocketAddress
Null
()
{
static
AllocatedSocketAddress
Null
()
noexcept
{
return
AllocatedSocketAddress
(
nullptr
,
0
);
}
bool
IsNull
()
const
{
bool
IsNull
()
const
noexcept
{
return
address
==
nullptr
;
}
size_type
GetSize
()
const
{
size_type
GetSize
()
const
noexcept
{
return
size
;
}
const
struct
sockaddr
*
GetAddress
()
const
{
const
struct
sockaddr
*
GetAddress
()
const
noexcept
{
return
address
;
}
operator
SocketAddress
()
const
{
operator
SocketAddress
()
const
noexcept
{
return
SocketAddress
(
address
,
size
);
}
operator
const
struct
sockaddr
*
()
const
{
operator
const
struct
sockaddr
*
()
const
noexcept
{
return
address
;
}
int
GetFamily
()
const
{
int
GetFamily
()
const
noexcept
{
return
address
->
sa_family
;
}
...
...
@@ -124,11 +124,11 @@ public:
* Does the object have a well-defined address? Check !IsNull()
* before calling this method.
*/
bool
IsDefined
()
const
{
bool
IsDefined
()
const
noexcept
{
return
GetFamily
()
!=
AF_UNSPEC
;
}
void
Clear
()
{
void
Clear
()
noexcept
{
free
(
address
);
address
=
nullptr
;
size
=
0
;
...
...
src/net/StaticSocketAddress.hxx
View file @
a057b4f6
...
...
@@ -51,52 +51,52 @@ public:
StaticSocketAddress
&
operator
=
(
SocketAddress
other
)
noexcept
;
operator
SocketAddress
()
const
{
operator
SocketAddress
()
const
noexcept
{
return
SocketAddress
(
reinterpret_cast
<
const
struct
sockaddr
*>
(
&
address
),
size
);
}
struct
sockaddr
*
GetAddress
()
{
struct
sockaddr
*
GetAddress
()
noexcept
{
return
reinterpret_cast
<
struct
sockaddr
*>
(
&
address
);
}
const
struct
sockaddr
*
GetAddress
()
const
{
const
struct
sockaddr
*
GetAddress
()
const
noexcept
{
return
reinterpret_cast
<
const
struct
sockaddr
*>
(
&
address
);
}
constexpr
size_type
GetCapacity
()
const
{
constexpr
size_type
GetCapacity
()
const
noexcept
{
return
sizeof
(
address
);
}
size_type
GetSize
()
const
{
size_type
GetSize
()
const
noexcept
{
return
size
;
}
void
SetSize
(
size_type
_size
)
{
void
SetSize
(
size_type
_size
)
noexcept
{
assert
(
_size
>
0
);
assert
(
size_t
(
_size
)
<=
sizeof
(
address
));
size
=
_size
;
}
int
GetFamily
()
const
{
int
GetFamily
()
const
noexcept
{
return
address
.
ss_family
;
}
bool
IsDefined
()
const
{
bool
IsDefined
()
const
noexcept
{
return
GetFamily
()
!=
AF_UNSPEC
;
}
void
Clear
()
{
void
Clear
()
noexcept
{
address
.
ss_family
=
AF_UNSPEC
;
}
gcc_pure
bool
operator
==
(
SocketAddress
other
)
const
{
bool
operator
==
(
SocketAddress
other
)
const
noexcept
{
return
(
SocketAddress
)
*
this
==
other
;
}
bool
operator
!=
(
SocketAddress
&
other
)
const
{
bool
operator
!=
(
SocketAddress
&
other
)
const
noexcept
{
return
!
(
*
this
==
other
);
}
};
...
...
src/output/MultipleOutputs.hxx
View file @
a057b4f6
...
...
@@ -85,7 +85,7 @@ public:
* those which are disabled right now.
*/
gcc_pure
unsigned
Size
()
const
{
unsigned
Size
()
const
noexcept
{
return
outputs
.
size
();
}
...
...
@@ -186,7 +186,7 @@ public:
* finished yet.
*/
gcc_pure
SignedSongTime
GetElapsedTime
()
const
{
SignedSongTime
GetElapsedTime
()
const
noexcept
{
return
elapsed_time
;
}
...
...
src/output/plugins/AlsaOutputPlugin.cxx
View file @
a057b4f6
...
...
@@ -132,7 +132,7 @@ public:
}
gcc_pure
const
char
*
GetDevice
()
{
const
char
*
GetDevice
()
const
noexcept
{
return
device
.
empty
()
?
default_device
:
device
.
c_str
();
}
...
...
src/output/plugins/OpenALOutputPlugin.cxx
View file @
a057b4f6
...
...
@@ -73,19 +73,19 @@ class OpenALOutput {
private
:
gcc_pure
ALint
GetSourceI
(
ALenum
param
)
const
{
ALint
GetSourceI
(
ALenum
param
)
const
noexcept
{
ALint
value
;
alGetSourcei
(
source
,
param
,
&
value
);
return
value
;
}
gcc_pure
bool
HasProcessed
()
const
{
bool
HasProcessed
()
const
noexcept
{
return
GetSourceI
(
AL_BUFFERS_PROCESSED
)
>
0
;
}
gcc_pure
bool
IsPlaying
()
const
{
bool
IsPlaying
()
const
noexcept
{
return
GetSourceI
(
AL_SOURCE_STATE
)
==
AL_PLAYING
;
}
...
...
src/output/plugins/RecorderOutputPlugin.cxx
View file @
a057b4f6
...
...
@@ -97,7 +97,7 @@ class RecorderOutput {
private
:
gcc_pure
bool
HasDynamicPath
()
const
{
bool
HasDynamicPath
()
const
noexcept
{
return
!
format_path
.
empty
();
}
...
...
src/output/plugins/httpd/HttpdInternal.hxx
View file @
a057b4f6
...
...
@@ -191,7 +191,7 @@ public:
* Caller must lock the mutex.
*/
gcc_pure
bool
HasClients
()
const
{
bool
HasClients
()
const
noexcept
{
return
!
clients
.
empty
();
}
...
...
@@ -199,7 +199,7 @@ public:
* Check whether there is at least one client.
*/
gcc_pure
bool
LockHasClients
()
const
{
bool
LockHasClients
()
const
noexcept
{
const
std
::
lock_guard
<
Mutex
>
protect
(
mutex
);
return
HasClients
();
}
...
...
src/player/Thread.cxx
View file @
a057b4f6
...
...
@@ -247,7 +247,7 @@ private:
* finished.
*/
gcc_pure
bool
IsDecoderAtCurrentSong
()
const
{
bool
IsDecoderAtCurrentSong
()
const
noexcept
{
assert
(
pipe
!=
nullptr
);
return
dc
.
pipe
==
pipe
;
...
...
@@ -259,7 +259,7 @@ private:
* switched to that song yet.
*/
gcc_pure
bool
IsDecoderAtNextSong
()
const
{
bool
IsDecoderAtNextSong
()
const
noexcept
{
return
dc
.
pipe
!=
nullptr
&&
!
IsDecoderAtCurrentSong
();
}
...
...
src/queue/Queue.hxx
View file @
a057b4f6
...
...
@@ -162,14 +162,14 @@ struct Queue {
}
gcc_pure
unsigned
OrderToPosition
(
unsigned
_order
)
const
{
unsigned
OrderToPosition
(
unsigned
_order
)
const
noexcept
{
assert
(
_order
<
length
);
return
order
[
_order
];
}
gcc_pure
unsigned
PositionToOrder
(
unsigned
position
)
const
{
unsigned
PositionToOrder
(
unsigned
position
)
const
noexcept
{
assert
(
position
<
length
);
for
(
unsigned
i
=
0
;;
++
i
)
{
...
...
@@ -181,7 +181,7 @@ struct Queue {
}
gcc_pure
uint8_t
GetPriorityAtPosition
(
unsigned
position
)
const
{
uint8_t
GetPriorityAtPosition
(
unsigned
position
)
const
noexcept
{
assert
(
position
<
length
);
return
items
[
position
].
priority
;
...
...
src/storage/CompositeStorage.cxx
View file @
a057b4f6
...
...
@@ -149,7 +149,7 @@ CompositeStorage::Directory::Make(const char *uri)
}
bool
CompositeStorage
::
Directory
::
Unmount
()
CompositeStorage
::
Directory
::
Unmount
()
noexcept
{
if
(
storage
==
nullptr
)
return
false
;
...
...
@@ -160,7 +160,7 @@ CompositeStorage::Directory::Unmount()
}
bool
CompositeStorage
::
Directory
::
Unmount
(
const
char
*
uri
)
CompositeStorage
::
Directory
::
Unmount
(
const
char
*
uri
)
noexcept
{
if
(
StringIsEmpty
(
uri
))
return
Unmount
();
...
...
src/storage/CompositeStorage.hxx
View file @
a057b4f6
...
...
@@ -55,7 +55,7 @@ class CompositeStorage final : public Storage {
~
Directory
();
gcc_pure
bool
IsEmpty
()
const
{
bool
IsEmpty
()
const
noexcept
{
return
storage
==
nullptr
&&
children
.
empty
();
}
...
...
@@ -64,8 +64,8 @@ class CompositeStorage final : public Storage {
Directory
&
Make
(
const
char
*
uri
);
bool
Unmount
();
bool
Unmount
(
const
char
*
uri
);
bool
Unmount
()
noexcept
;
bool
Unmount
(
const
char
*
uri
)
noexcept
;
gcc_pure
bool
MapToRelativeUTF8
(
std
::
string
&
buffer
,
...
...
src/storage/plugins/CurlStorage.cxx
View file @
a057b4f6
...
...
@@ -511,7 +511,7 @@ private:
* to the base file name.
*/
gcc_pure
StringView
HrefToEscapedName
(
const
char
*
href
)
const
{
StringView
HrefToEscapedName
(
const
char
*
href
)
const
noexcept
{
const
char
*
path
=
uri_get_path
(
href
);
if
(
path
==
nullptr
)
return
nullptr
;
...
...
src/tag/MixRamp.cxx
View file @
a057b4f6
...
...
@@ -53,7 +53,7 @@ ParseMixRampTag(MixRampInfo &info, const char *name, const char *value)
const
char
*
value
;
gcc_pure
const
char
*
operator
[](
const
char
*
n
)
const
{
const
char
*
operator
[](
const
char
*
n
)
const
noexcept
{
return
StringEqualsCaseASCII
(
name
,
n
)
?
value
:
nullptr
;
...
...
@@ -70,7 +70,7 @@ ParseMixRampVorbis(MixRampInfo &info, const char *entry)
const
char
*
entry
;
gcc_pure
const
char
*
operator
[](
const
char
*
n
)
const
{
const
char
*
operator
[](
const
char
*
n
)
const
noexcept
{
return
vorbis_comment_value
(
entry
,
n
);
}
};
...
...
src/tag/ReplayGain.cxx
View file @
a057b4f6
...
...
@@ -60,7 +60,7 @@ ParseReplayGainTag(ReplayGainInfo &info, const char *name, const char *value)
const
char
*
value
;
gcc_pure
const
char
*
operator
[](
const
char
*
n
)
const
{
const
char
*
operator
[](
const
char
*
n
)
const
noexcept
{
return
StringEqualsCaseASCII
(
name
,
n
)
?
value
:
nullptr
;
...
...
@@ -77,7 +77,7 @@ ParseReplayGainVorbis(ReplayGainInfo &info, const char *entry)
const
char
*
entry
;
gcc_pure
const
char
*
operator
[](
const
char
*
n
)
const
{
const
char
*
operator
[](
const
char
*
n
)
const
noexcept
{
return
vorbis_comment_value
(
entry
,
n
);
}
};
...
...
src/tag/Set.cxx
View file @
a057b4f6
...
...
@@ -67,7 +67,7 @@ CopyTagMask(TagBuilder &dest, const Tag &src, tag_mask_t mask)
void
TagSet
::
InsertUnique
(
const
Tag
&
src
,
TagType
type
,
const
char
*
value
,
tag_mask_t
group_mask
)
tag_mask_t
group_mask
)
noexcept
{
TagBuilder
builder
;
if
(
value
==
nullptr
)
...
...
@@ -85,7 +85,7 @@ TagSet::InsertUnique(const Tag &src, TagType type, const char *value,
bool
TagSet
::
CheckUnique
(
TagType
dest_type
,
const
Tag
&
tag
,
TagType
src_type
,
tag_mask_t
group_mask
)
tag_mask_t
group_mask
)
noexcept
{
bool
found
=
false
;
...
...
@@ -101,7 +101,7 @@ TagSet::CheckUnique(TagType dest_type,
void
TagSet
::
InsertUnique
(
const
Tag
&
tag
,
TagType
type
,
tag_mask_t
group_mask
)
TagType
type
,
tag_mask_t
group_mask
)
noexcept
{
static_assert
(
sizeof
(
group_mask
)
*
8
>=
TAG_NUM_OF_ITEM_TYPES
,
"Mask is too small"
);
...
...
src/tag/Set.hxx
View file @
a057b4f6
...
...
@@ -33,7 +33,7 @@
*/
struct
TagLess
{
gcc_pure
bool
operator
()(
const
Tag
&
a
,
const
Tag
&
b
)
const
{
bool
operator
()(
const
Tag
&
a
,
const
Tag
&
b
)
const
noexcept
{
if
(
a
.
num_items
!=
b
.
num_items
)
return
a
.
num_items
<
b
.
num_items
;
...
...
@@ -59,15 +59,15 @@ struct TagLess {
class
TagSet
:
public
std
::
set
<
Tag
,
TagLess
>
{
public
:
void
InsertUnique
(
const
Tag
&
tag
,
TagType
type
,
tag_mask_t
group_mask
);
TagType
type
,
tag_mask_t
group_mask
)
noexcept
;
private
:
void
InsertUnique
(
const
Tag
&
src
,
TagType
type
,
const
char
*
value
,
tag_mask_t
group_mask
);
tag_mask_t
group_mask
)
noexcept
;
bool
CheckUnique
(
TagType
dest_type
,
const
Tag
&
tag
,
TagType
src_type
,
tag_mask_t
group_mask
);
tag_mask_t
group_mask
)
noexcept
;
};
#endif
src/tag/TagBuilder.hxx
View file @
a057b4f6
...
...
@@ -82,7 +82,7 @@ public:
* Returns true if the object contains any information.
*/
gcc_pure
bool
IsDefined
()
const
{
bool
IsDefined
()
const
noexcept
{
return
!
duration
.
IsNegative
()
||
has_playlist
||
!
IsEmpty
();
}
...
...
src/thread/Id.hxx
View file @
a057b4f6
...
...
@@ -53,7 +53,7 @@ public:
#endif
gcc_const
static
ThreadId
Null
()
{
static
ThreadId
Null
()
noexcept
{
#ifdef WIN32
return
0
;
#else
...
...
@@ -63,7 +63,7 @@ public:
}
gcc_pure
bool
IsNull
()
const
{
bool
IsNull
()
const
noexcept
{
return
*
this
==
Null
();
}
...
...
@@ -80,7 +80,7 @@ public:
}
gcc_pure
bool
operator
==
(
const
ThreadId
&
other
)
const
{
bool
operator
==
(
const
ThreadId
&
other
)
const
noexcept
{
#ifdef WIN32
return
id
==
other
.
id
;
#else
...
...
src/thread/Thread.hxx
View file @
a057b4f6
...
...
@@ -77,7 +77,7 @@ public:
* Check if this thread is the current thread.
*/
gcc_pure
bool
IsInside
()
const
{
bool
IsInside
()
const
noexcept
{
#ifdef WIN32
return
GetCurrentThreadId
()
==
id
;
#else
...
...
src/util/ConstBuffer.hxx
View file @
a057b4f6
...
...
@@ -140,7 +140,7 @@ struct ConstBuffer {
template
<
typename
U
>
gcc_pure
bool
Contains
(
U
&&
u
)
const
{
bool
Contains
(
U
&&
u
)
const
noexcept
{
for
(
const
auto
&
i
:
*
this
)
if
(
u
==
i
)
return
true
;
...
...
src/util/StringView.cxx
View file @
a057b4f6
...
...
@@ -31,14 +31,14 @@
#include "CharUtil.hxx"
void
StringView
::
StripLeft
()
StringView
::
StripLeft
()
noexcept
{
while
(
!
IsEmpty
()
&&
IsWhitespaceOrNull
(
front
()))
pop_front
();
}
void
StringView
::
StripRight
()
StringView
::
StripRight
()
noexcept
{
while
(
!
IsEmpty
()
&&
IsWhitespaceOrNull
(
back
()))
pop_back
();
...
...
src/util/StringView.hxx
View file @
a057b4f6
...
...
@@ -64,67 +64,67 @@ struct StringView : ConstBuffer<char> {
return
StringView
(
""
,
size_t
(
0
));
}
void
SetEmpty
()
{
void
SetEmpty
()
noexcept
{
data
=
""
;
size
=
0
;
}
gcc_pure
pointer_type
Find
(
char
ch
)
const
{
pointer_type
Find
(
char
ch
)
const
noexcept
{
return
(
pointer_type
)
memchr
(
data
,
ch
,
size
);
}
StringView
&
operator
=
(
std
::
nullptr_t
)
{
StringView
&
operator
=
(
std
::
nullptr_t
)
noexcept
{
data
=
nullptr
;
size
=
0
;
return
*
this
;
}
StringView
&
operator
=
(
pointer_type
_data
)
{
StringView
&
operator
=
(
pointer_type
_data
)
noexcept
{
data
=
_data
;
size
=
_data
!=
nullptr
?
strlen
(
_data
)
:
0
;
return
*
this
;
}
gcc_pure
bool
StartsWith
(
StringView
needle
)
const
{
bool
StartsWith
(
StringView
needle
)
const
noexcept
{
return
size
>=
needle
.
size
&&
memcmp
(
data
,
needle
.
data
,
needle
.
size
)
==
0
;
}
gcc_pure
bool
Equals
(
StringView
other
)
const
{
bool
Equals
(
StringView
other
)
const
noexcept
{
return
size
==
other
.
size
&&
memcmp
(
data
,
other
.
data
,
size
)
==
0
;
}
template
<
size_t
n
>
bool
EqualsLiteral
(
const
char
(
&
other
)[
n
])
const
{
bool
EqualsLiteral
(
const
char
(
&
other
)[
n
])
const
noexcept
{
return
Equals
(
Literal
(
other
));
}
gcc_pure
bool
EqualsIgnoreCase
(
StringView
other
)
const
{
bool
EqualsIgnoreCase
(
StringView
other
)
const
noexcept
{
return
size
==
other
.
size
&&
strncasecmp
(
data
,
other
.
data
,
size
)
==
0
;
}
template
<
size_t
n
>
bool
EqualsLiteralIgnoreCase
(
const
char
(
&
other
)[
n
])
const
{
bool
EqualsLiteralIgnoreCase
(
const
char
(
&
other
)[
n
])
const
noexcept
{
return
EqualsIgnoreCase
(
Literal
(
other
));
}
/**
* Skip all whitespace at the beginning.
*/
void
StripLeft
();
void
StripLeft
()
noexcept
;
/**
* Skip all whitespace at the end.
*/
void
StripRight
();
void
StripRight
()
noexcept
;
void
Strip
()
{
void
Strip
()
noexcept
{
StripLeft
();
StripRight
();
}
...
...
test/FakeDecoderAPI.cxx
View file @
a057b4f6
...
...
@@ -45,7 +45,7 @@ FakeDecoder::Ready(const AudioFormat audio_format,
}
DecoderCommand
FakeDecoder
::
GetCommand
()
FakeDecoder
::
GetCommand
()
noexcept
{
return
DecoderCommand
::
NONE
;
}
...
...
@@ -56,13 +56,13 @@ FakeDecoder::CommandFinished()
}
SongTime
FakeDecoder
::
GetSeekTime
()
FakeDecoder
::
GetSeekTime
()
noexcept
{
return
SongTime
();
}
uint64_t
FakeDecoder
::
GetSeekFrame
()
FakeDecoder
::
GetSeekFrame
()
noexcept
{
return
1
;
}
...
...
test/FakeDecoderAPI.hxx
View file @
a057b4f6
...
...
@@ -34,10 +34,10 @@ struct FakeDecoder final : DecoderClient {
/* virtual methods from DecoderClient */
void
Ready
(
AudioFormat
audio_format
,
bool
seekable
,
SignedSongTime
duration
)
override
;
DecoderCommand
GetCommand
()
override
;
DecoderCommand
GetCommand
()
noexcept
override
;
void
CommandFinished
()
override
;
SongTime
GetSeekTime
()
override
;
uint64_t
GetSeekFrame
()
override
;
SongTime
GetSeekTime
()
noexcept
override
;
uint64_t
GetSeekFrame
()
noexcept
override
;
void
SeekError
()
override
;
InputStreamPtr
OpenUri
(
const
char
*
uri
)
override
;
size_t
Read
(
InputStream
&
is
,
void
*
buffer
,
size_t
length
)
override
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment