Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
senf
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package Registry
Container Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
wiback
senf
Commits
2a87b62c
Commit
2a87b62c
authored
15 years ago
by
g0dil
Browse files
Options
Downloads
Patches
Plain Diff
Utils/Console: Add argument type conversion and FlagCollection documentation
parent
65249ae3
No related branches found
No related tags found
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
Utils/Console/Mainpage.dox
+23
-0
23 additions, 0 deletions
Utils/Console/Mainpage.dox
Utils/Console/Traits.hh
+40
-0
40 additions, 0 deletions
Utils/Console/Traits.hh
with
63 additions
and
0 deletions
Utils/Console/Mainpage.dox
+
23
−
0
View file @
2a87b62c
...
...
@@ -1271,6 +1271,29 @@
\endhtmlonly
\subsection console_args_convert Handling special argument types by conversion
Sometimes an argument type is best handled by just pretending it to be of some other type. The
basic idea is, to us \c boost::function to convert the real argument type to some different type
\code
unsigned char fun4(unsigned char value)
{
return value;
}
senf::console::root()
.add("test8", boost::function<unsigned (unsigned)>(&fun4));
\endcode
Here, the type signature specified via \c boost::function is different from the real type
signature but is compatible. \c boost::function automatically handles the conversion
process. Since the console library now sees the argument and return value of type \c unsigned,
the values will be parsed correctly as numeric values.
The same idea can be used to support custom parsing rules. See senf::console::FlagCollection.
\subsection console_args_custom Extending the library to support additional types
To support or customize parsing/formatting of other types, they need to be registered. In it's
...
...
This diff is collapsed.
Click to expand it.
Utils/Console/Traits.hh
+
40
−
0
View file @
2a87b62c
...
...
@@ -219,6 +219,46 @@ namespace console {
# define SENF_CONSOLE_REGISTER_ENUM_MEMBER(Class, Type, Values) \
SENF_CONSOLE_REGISTER_ENUM_(Class::, Type, Values)
/** \brief Bit-mask flag argument type
senf::console::FlagCollection supplies a special argument type for use in registering
console commands. This argument type is used to represent a bit-mask of single flags.
\code
// Function taking a flags argument
void func(unsigned flags);
// Enum containing all the possible flag values
enum MyFlags { Foo = 1,
Bar = 2,
Baz = 4,
Doo = 8 };
SENF_CONSOLE_REGISTER_ENUM(MyFlags, (Foo)(Bar)(Baz)(Boo));
// Register the function with a FlagCollection argument type
consoleDir.add("func", boost::function<void (FlagCollection<MyFlags>)>(&func));
\endcode
To use the FlagCollection class
\li you need a function which takes a bit-mask of flags as argument
\li you define and register an enum with all possible flag values
\li you register the function with a FlagCollection argument type using \c boost::function
for the conversion. This is also possible for return values.
The nice thing is, that \c boot::function supports compatible argument types and does
automatic type conversion. Since a FlagCollection is convertible to and from unsigned long,
this conversion will work.
After registering this function, you can call it with a collection of flags as argument
<pre>
console:/$ help func
Usage:
func arg11:MyFlags
console:/$ func Foo
console:/$ func (Foo Boo)
</pre>
*/
template
<
class
Enum
>
struct
FlagCollection
{
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment