[v1,1/3] libcamera: base: utils: Simplify `operator<<` for `Duration`
diff mbox series

Message ID 20260115111630.1892890-1-barnabas.pocze@ideasonboard.com
State Accepted
Headers show
Series
  • [v1,1/3] libcamera: base: utils: Simplify `operator<<` for `Duration`
Related show

Commit Message

Barnabás Pőcze Jan. 15, 2026, 11:16 a.m. UTC
There is no real need for a function template. It is not defined in a
header file, so it has limited availability, and there exists only a
single instantion.

So convert it to use `std::ostream` directly, like most `operator<<`
in the code base.

Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>
---
 include/libcamera/base/utils.h |  4 +---
 src/libcamera/base/utils.cpp   | 11 ++---------
 2 files changed, 3 insertions(+), 12 deletions(-)

Comments

Kieran Bingham Jan. 16, 2026, 11:24 a.m. UTC | #1
Quoting Barnabás Pőcze (2026-01-15 11:16:28)
> There is no real need for a function template. It is not defined in a
> header file, so it has limited availability, and there exists only a
> single instantion.
> 
> So convert it to use `std::ostream` directly, like most `operator<<`
> in the code base.
> 


Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>

> Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>
> ---
>  include/libcamera/base/utils.h |  4 +---
>  src/libcamera/base/utils.cpp   | 11 ++---------
>  2 files changed, 3 insertions(+), 12 deletions(-)
> 
> diff --git a/include/libcamera/base/utils.h b/include/libcamera/base/utils.h
> index 0b7407f77..6ce1ace43 100644
> --- a/include/libcamera/base/utils.h
> +++ b/include/libcamera/base/utils.h
> @@ -426,9 +426,7 @@ scope_exit(EF) -> scope_exit<EF>;
>  } /* namespace utils */
>  
>  #ifndef __DOXYGEN__
> -template<class CharT, class Traits>
> -std::basic_ostream<CharT, Traits> &operator<<(std::basic_ostream<CharT, Traits> &os,
> -                                             const utils::Duration &d);
> +std::ostream &operator<<(std::ostream &os, const utils::Duration &d);
>  #endif
>  
>  } /* namespace libcamera */
> diff --git a/src/libcamera/base/utils.cpp b/src/libcamera/base/utils.cpp
> index 65d9181c9..2c3f2b7e6 100644
> --- a/src/libcamera/base/utils.cpp
> +++ b/src/libcamera/base/utils.cpp
> @@ -658,11 +658,9 @@ void ScopeExitActions::release()
>  } /* namespace utils */
>  
>  #ifndef __DOXYGEN__
> -template<class CharT, class Traits>
> -std::basic_ostream<CharT, Traits> &operator<<(std::basic_ostream<CharT, Traits> &os,
> -                                             const utils::Duration &d)
> +std::ostream &operator<<(std::ostream &os, const utils::Duration &d)
>  {
> -       std::basic_ostringstream<CharT, Traits> s;
> +       std::ostringstream s;
>  
>         s.flags(os.flags());
>         s.imbue(os.getloc());
> @@ -671,11 +669,6 @@ std::basic_ostream<CharT, Traits> &operator<<(std::basic_ostream<CharT, Traits>
>         s << d.get<std::micro>() << "us";
>         return os << s.str();
>  }
> -
> -template
> -std::basic_ostream<char, std::char_traits<char>> &
> -operator<< <char, std::char_traits<char>>(std::basic_ostream<char, std::char_traits<char>> &os,
> -                                         const utils::Duration &d);
>  #endif
>  
>  } /* namespace libcamera */
> -- 
> 2.52.0
>
Laurent Pinchart Jan. 22, 2026, 12:34 a.m. UTC | #2
On Thu, Jan 15, 2026 at 12:16:28PM +0100, Barnabás Pőcze wrote:
> There is no real need for a function template. It is not defined in a
> header file, so it has limited availability, and there exists only a
> single instantion.

Agreed. It's an internal function, not part of the public API, so the
likelihood of needing to support something else that std::ostream is
pretty much null.

Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>

> So convert it to use `std::ostream` directly, like most `operator<<`
> in the code base.
> 
> Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>
> ---
>  include/libcamera/base/utils.h |  4 +---
>  src/libcamera/base/utils.cpp   | 11 ++---------
>  2 files changed, 3 insertions(+), 12 deletions(-)
> 
> diff --git a/include/libcamera/base/utils.h b/include/libcamera/base/utils.h
> index 0b7407f77..6ce1ace43 100644
> --- a/include/libcamera/base/utils.h
> +++ b/include/libcamera/base/utils.h
> @@ -426,9 +426,7 @@ scope_exit(EF) -> scope_exit<EF>;
>  } /* namespace utils */
>  
>  #ifndef __DOXYGEN__
> -template<class CharT, class Traits>
> -std::basic_ostream<CharT, Traits> &operator<<(std::basic_ostream<CharT, Traits> &os,
> -					      const utils::Duration &d);
> +std::ostream &operator<<(std::ostream &os, const utils::Duration &d);
>  #endif
>  
>  } /* namespace libcamera */
> diff --git a/src/libcamera/base/utils.cpp b/src/libcamera/base/utils.cpp
> index 65d9181c9..2c3f2b7e6 100644
> --- a/src/libcamera/base/utils.cpp
> +++ b/src/libcamera/base/utils.cpp
> @@ -658,11 +658,9 @@ void ScopeExitActions::release()
>  } /* namespace utils */
>  
>  #ifndef __DOXYGEN__
> -template<class CharT, class Traits>
> -std::basic_ostream<CharT, Traits> &operator<<(std::basic_ostream<CharT, Traits> &os,
> -					      const utils::Duration &d)
> +std::ostream &operator<<(std::ostream &os, const utils::Duration &d)
>  {
> -	std::basic_ostringstream<CharT, Traits> s;
> +	std::ostringstream s;
>  
>  	s.flags(os.flags());
>  	s.imbue(os.getloc());
> @@ -671,11 +669,6 @@ std::basic_ostream<CharT, Traits> &operator<<(std::basic_ostream<CharT, Traits>
>  	s << d.get<std::micro>() << "us";
>  	return os << s.str();
>  }
> -
> -template
> -std::basic_ostream<char, std::char_traits<char>> &
> -operator<< <char, std::char_traits<char>>(std::basic_ostream<char, std::char_traits<char>> &os,
> -					  const utils::Duration &d);
>  #endif
>  
>  } /* namespace libcamera */

Patch
diff mbox series

diff --git a/include/libcamera/base/utils.h b/include/libcamera/base/utils.h
index 0b7407f77..6ce1ace43 100644
--- a/include/libcamera/base/utils.h
+++ b/include/libcamera/base/utils.h
@@ -426,9 +426,7 @@  scope_exit(EF) -> scope_exit<EF>;
 } /* namespace utils */
 
 #ifndef __DOXYGEN__
-template<class CharT, class Traits>
-std::basic_ostream<CharT, Traits> &operator<<(std::basic_ostream<CharT, Traits> &os,
-					      const utils::Duration &d);
+std::ostream &operator<<(std::ostream &os, const utils::Duration &d);
 #endif
 
 } /* namespace libcamera */
diff --git a/src/libcamera/base/utils.cpp b/src/libcamera/base/utils.cpp
index 65d9181c9..2c3f2b7e6 100644
--- a/src/libcamera/base/utils.cpp
+++ b/src/libcamera/base/utils.cpp
@@ -658,11 +658,9 @@  void ScopeExitActions::release()
 } /* namespace utils */
 
 #ifndef __DOXYGEN__
-template<class CharT, class Traits>
-std::basic_ostream<CharT, Traits> &operator<<(std::basic_ostream<CharT, Traits> &os,
-					      const utils::Duration &d)
+std::ostream &operator<<(std::ostream &os, const utils::Duration &d)
 {
-	std::basic_ostringstream<CharT, Traits> s;
+	std::ostringstream s;
 
 	s.flags(os.flags());
 	s.imbue(os.getloc());
@@ -671,11 +669,6 @@  std::basic_ostream<CharT, Traits> &operator<<(std::basic_ostream<CharT, Traits>
 	s << d.get<std::micro>() << "us";
 	return os << s.str();
 }
-
-template
-std::basic_ostream<char, std::char_traits<char>> &
-operator<< <char, std::char_traits<char>>(std::basic_ostream<char, std::char_traits<char>> &os,
-					  const utils::Duration &d);
 #endif
 
 } /* namespace libcamera */