www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - How to compile this template with short type?

reply "mrd" <denis.feklushkin gmail.com> writes:
[code]
Unsigned!T encodeZigZag( T )( inout T v ) pure
if( isSigned!( T ) )
{
      return v > 0
          ?
              v * 2
          :
              -v * 2 - 1;
}
unittest
{
      assert( encodeZigZag!long( 2147483647 ) == 4294967294 );
      assert( encodeZigZag!long( -2147483648 ) == 4294967295 );

      assert( encodeZigZag!short( 20 ) == 40 );
      assert( encodeZigZag!short( -20 ) == 39 );
}
[/code]

Error: cannot implicitly convert expression (cast(int)v > 0 ?
cast(int)v * 2 : cast(int)-v * 2 - 1) of type int to ushort

int?!
Sep 17 2013
parent reply "Namespace" <rswhite4 googlemail.com> writes:
On Tuesday, 17 September 2013 at 07:58:40 UTC, mrd wrote:
 [code]
 Unsigned!T encodeZigZag( T )( inout T v ) pure
 if( isSigned!( T ) )
 {
      return v > 0
          ?
              v * 2
          :
              -v * 2 - 1;
 }
 unittest
 {
      assert( encodeZigZag!long( 2147483647 ) == 4294967294 );
      assert( encodeZigZag!long( -2147483648 ) == 4294967295 );

      assert( encodeZigZag!short( 20 ) == 40 );
      assert( encodeZigZag!short( -20 ) == 39 );
 }
 [/code]

 Error: cannot implicitly convert expression (cast(int)v > 0 ?
 cast(int)v * 2 : cast(int)-v * 2 - 1) of type int to ushort

 int?!
---- Unsigned!T encodeZigZag( T )( inout T v ) pure if( isSigned!( T ) ) { return cast(Unsigned!T)(v > 0 ? v * 2 : -v * 2 - 1); } ----
Sep 17 2013
parent "mrd" <denis.feklushkin gmail.com> writes:
ahhh, many thanks!

I need more sleep
Sep 17 2013