Skip to content

Commit 3e3efc9

Browse files
committed
Add GALAlgorithm::AddShortNameAlias()
1 parent 3f6c6ac commit 3e3efc9

File tree

2 files changed

+69
-0
lines changed

2 files changed

+69
-0
lines changed

Diff for: gcore/gdalalgorithm.cpp

+42
Original file line numberDiff line numberDiff line change
@@ -886,6 +886,19 @@ GDALInConstructionAlgorithmArg::AddHiddenAlias(const std::string &alias)
886886
return *this;
887887
}
888888

889+
/************************************************************************/
890+
/* GDALInConstructionAlgorithmArg::AddShortNameAlias() */
891+
/************************************************************************/
892+
893+
GDALInConstructionAlgorithmArg &
894+
GDALInConstructionAlgorithmArg::AddShortNameAlias(char shortNameAlias)
895+
{
896+
m_decl.AddShortNameAlias(shortNameAlias);
897+
if (m_owner)
898+
m_owner->AddShortNameAliasFor(this, shortNameAlias);
899+
return *this;
900+
}
901+
889902
/************************************************************************/
890903
/* GDALInConstructionAlgorithmArg::SetPositional() */
891904
/************************************************************************/
@@ -2100,6 +2113,27 @@ void GDALAlgorithm::AddAliasFor(GDALInConstructionAlgorithmArg *arg,
21002113
}
21012114
}
21022115

2116+
/************************************************************************/
2117+
/* GDALAlgorithm::AddShortNameAliasFor() */
2118+
/************************************************************************/
2119+
2120+
//! @cond Doxygen_Suppress
2121+
void GDALAlgorithm::AddShortNameAliasFor(GDALInConstructionAlgorithmArg *arg,
2122+
char shortNameAlias)
2123+
{
2124+
std::string alias;
2125+
alias += shortNameAlias;
2126+
if (cpl::contains(m_mapShortNameToArg, alias))
2127+
{
2128+
ReportError(CE_Failure, CPLE_AppDefined,
2129+
"Short name '%s' already declared.", alias.c_str());
2130+
}
2131+
else
2132+
{
2133+
m_mapShortNameToArg[alias] = arg;
2134+
}
2135+
}
2136+
21032137
//! @endcond
21042138

21052139
/************************************************************************/
@@ -3652,6 +3686,14 @@ GDALAlgorithm::GetArgNamesForCLI() const
36523686
opt += arg->GetShortName();
36533687
addComma = true;
36543688
}
3689+
for (char alias : arg->GetShortNameAliases())
3690+
{
3691+
if (addComma)
3692+
opt += ", ";
3693+
opt += "-";
3694+
opt += alias;
3695+
addComma = true;
3696+
}
36553697
for (const std::string &alias : arg->GetAliases())
36563698
{
36573699
if (addComma)

Diff for: gcore/gdalalgorithm.h

+27
Original file line numberDiff line numberDiff line change
@@ -559,6 +559,13 @@ class CPL_DLL GDALAlgorithmArgDecl final
559559
return *this;
560560
}
561561

562+
/** Declare a shortname alias.*/
563+
GDALAlgorithmArgDecl &AddShortNameAlias(char shortNameAlias)
564+
{
565+
m_shortNameAliases.push_back(shortNameAlias);
566+
return *this;
567+
}
568+
562569
/** Declare an hidden alias (i.e. not exposed in usage).
563570
* Must be 2 characters at least. */
564571
GDALAlgorithmArgDecl &AddHiddenAlias(const std::string &alias)
@@ -854,6 +861,12 @@ class CPL_DLL GDALAlgorithmArgDecl final
854861
return m_aliases;
855862
}
856863

864+
/** Return the shortname aliases (potentially none) */
865+
inline const std::vector<char> &GetShortNameAliases() const
866+
{
867+
return m_shortNameAliases;
868+
}
869+
857870
/** Return the description */
858871
inline const std::string &GetDescription() const
859872
{
@@ -1112,6 +1125,7 @@ class CPL_DLL GDALAlgorithmArgDecl final
11121125
std::map<std::string, std::vector<std::string>> m_metadata{};
11131126
std::vector<std::string> m_aliases{};
11141127
std::vector<std::string> m_hiddenAliases{};
1128+
std::vector<char> m_shortNameAliases{};
11151129
std::vector<std::string> m_choices{};
11161130
std::vector<std::string> m_hiddenChoices{};
11171131
std::variant<bool, std::string, int, double, std::vector<std::string>,
@@ -1188,6 +1202,12 @@ class CPL_DLL GDALAlgorithmArg /* non-final */
11881202
return m_decl.GetAliases();
11891203
}
11901204

1205+
/** Alias for GDALAlgorithmArgDecl::GetShortNameAliases() */
1206+
inline const std::vector<char> &GetShortNameAliases() const
1207+
{
1208+
return m_decl.GetShortNameAliases();
1209+
}
1210+
11911211
/** Alias for GDALAlgorithmArgDecl::GetDescription() */
11921212
inline const std::string &GetDescription() const
11931213
{
@@ -1617,6 +1637,9 @@ class CPL_DLL GDALInConstructionAlgorithmArg final : public GDALAlgorithmArg
16171637
/** Add a non-documented alias for the argument */
16181638
GDALInConstructionAlgorithmArg &AddHiddenAlias(const std::string &alias);
16191639

1640+
/** Add a shortname alias for the argument */
1641+
GDALInConstructionAlgorithmArg &AddShortNameAlias(char shortNameAlias);
1642+
16201643
/** Alias for GDALAlgorithmArgDecl::SetPositional() */
16211644
GDALInConstructionAlgorithmArg &SetPositional();
16221645

@@ -2475,6 +2498,10 @@ class CPL_DLL GDALAlgorithmRegistry
24752498
//! @cond Doxygen_Suppress
24762499
void AddAliasFor(GDALInConstructionAlgorithmArg *arg,
24772500
const std::string &alias);
2501+
2502+
void AddShortNameAliasFor(GDALInConstructionAlgorithmArg *arg,
2503+
char shortNameAlias);
2504+
24782505
void SetPositional(GDALInConstructionAlgorithmArg *arg);
24792506

24802507
//! @endcond

0 commit comments

Comments
 (0)