batman-adv: add biggest_unsigned_int(x) macro

Message ID 1322044544-15153-1-git-send-email-ordex@autistici.org (mailing list archive)
State Accepted, archived
Commit 9c7df129e4e85c3a8aa3e249725fc1587e74ab8c
Headers

Commit Message

Antonio Quartulli Nov. 23, 2011, 10:35 a.m. UTC
  in case of dynamic type variable, it could be needed to compute at compile time
its maximal value. This macro helps in doing that for unsigned integer types

Signed-off-by: Antonio Quartulli <ordex@autistici.org>
---
 main.h |    3 +++
 1 files changed, 3 insertions(+), 0 deletions(-)
  

Comments

Marek Lindner Nov. 25, 2011, 1:08 a.m. UTC | #1
On Wednesday, November 23, 2011 18:35:44 Antonio Quartulli wrote:
> in case of dynamic type variable, it could be needed to compute at compile
> time its maximal value. This macro helps in doing that for unsigned
> integer types
> 
> Signed-off-by: Antonio Quartulli <ordex@autistici.org>
> ---
>  main.h |    3 +++
>  1 files changed, 3 insertions(+), 0 deletions(-)
> 
> diff --git a/main.h b/main.h
> index 464439f..3c58235 100644
> --- a/main.h
> +++ b/main.h
> @@ -210,6 +210,9 @@ static inline int compare_eth(const void *data1, const
> void *data2) /* Returns the smallest signed integer in two's complement
> with the sizeof x */ #define smallest_signed_int(x) (1u << (7u + 8u *
> (sizeof(x) - 1u))) 
> +/* Returns the biggest unsigned integer with the sizeof x */
> +#define biggest_unsigned_int(x) (~(x)0)
> +

The final conclusion of the IRC discussion might have escaped me but wasn't 
there supposed to be a cast somewhere ?

Regards,
Marek
  
Sven Eckelmann Nov. 25, 2011, 8:50 a.m. UTC | #2
On Friday 25 November 2011 09:08:47 Marek Lindner wrote:
[...]
> > +/* Returns the biggest unsigned integer with the sizeof x */
> > +#define biggest_unsigned_int(x) (~(x)0)
> > +
> 
> The final conclusion of the IRC discussion might have escaped me but wasn't
> there supposed to be a cast somewhere ?

There is a cast. The part "(x)" of "(~(x)0)" is the cast. And I don't think 
that there was a final conclusion. I am not really convinced that this should 
be part of batman-adv. Just look at include/linux/kernel.h for similar 
functionality (but with predefined types). Maybe this would be the correct 
position for such a macro? (I don't know it... just thinking out loud).

Kind regards,
	Sven
  
Antonio Quartulli Nov. 25, 2011, 10:53 a.m. UTC | #3
On Fri, Nov 25, 2011 at 09:50:41AM +0100, Sven Eckelmann wrote:
> On Friday 25 November 2011 09:08:47 Marek Lindner wrote:
> [...]
> > > +/* Returns the biggest unsigned integer with the sizeof x */
> > > +#define biggest_unsigned_int(x) (~(x)0)
> > > +
> > 
> > The final conclusion of the IRC discussion might have escaped me but wasn't
> > there supposed to be a cast somewhere ?
> 
> There is a cast. The part "(x)" of "(~(x)0)" is the cast. And I don't think 
> that there was a final conclusion. I am not really convinced that this should 
> be part of batman-adv. Just look at include/linux/kernel.h for similar 
> functionality (but with predefined types). Maybe this would be the correct 
> position for such a macro? (I don't know it... just thinking out loud).

Might be a good idea to send it to the kernel ml, but as usual, I think
we should first include it in the batman-adv code (am I wrong or we are
still waiting for seq_before/after to be included somewhere?).

But I agree with you, I should also send this patch to the kerel ml.

Cheers,
  
Marek Lindner Feb. 11, 2012, 11:03 a.m. UTC | #4
On Wednesday, November 23, 2011 18:35:44 Antonio Quartulli wrote:
> in case of dynamic type variable, it could be needed to compute at compile
> time its maximal value. This macro helps in doing that for unsigned
> integer types

Applied in revision 9c7df12.

Thanks,
Marek
  

Patch

diff --git a/main.h b/main.h
index 464439f..3c58235 100644
--- a/main.h
+++ b/main.h
@@ -210,6 +210,9 @@  static inline int compare_eth(const void *data1, const void *data2)
 /* Returns the smallest signed integer in two's complement with the sizeof x */
 #define smallest_signed_int(x) (1u << (7u + 8u * (sizeof(x) - 1u)))
 
+/* Returns the biggest unsigned integer with the sizeof x */
+#define biggest_unsigned_int(x) (~(x)0)
+
 /* Checks if a sequence number x is a predecessor/successor of y.
  * they handle overflows/underflows and can correctly check for a
  * predecessor/successor unless the variable sequence number has grown by