<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 12pt;
font-family:Calibri
}
--></style></head>
<body class='hmmessage'><div dir='ltr'><div style="line-height: 21.3px; color: rgb(68, 68, 68); font-size: 15px; background-color: rgb(255, 255, 255);">Hi Everyone,</div><div style="line-height: 21.3px; color: rgb(68, 68, 68); font-size: 15px; background-color: rgb(255, 255, 255);"><span style="line-height: 21.3px;"><br></span></div><div style="line-height: 21.3px; color: rgb(68, 68, 68); font-size: 15px; background-color: rgb(255, 255, 255);"><span style="line-height: 21.3px;">I want to write functor for generating random values of +1/-1 to implement one of my interested algorithm in p4. So referring Antonin's post on writing own hash functions I have written something like this:</span></div><div style="line-height: 21.3px; color: rgb(68, 68, 68); font-size: 15px; background-color: rgb(255, 255, 255);"><br style="line-height: 21.3px;"></div><div style="line-height: 21.3px; color: rgb(68, 68, 68); font-size: 15px; background-color: rgb(255, 255, 255);"><div style="line-height: 21.3px;"><i style="line-height: 21.3px;"><font size="2" style="line-height: normal;">struct my_hash {</font></i></div><div style="line-height: 21.3px;"><i style="line-height: 21.3px;"><font size="2" style="line-height: normal;">     uint16_t operator()(const char *buf, size_t s) const {   </font></i></div><div style="line-height: 21.3px;"><i style="line-height: 21.3px;"><font size="2" style="line-height: normal;"><span class="ecxApple-tab-span" style="line-height: 18.46px; white-space: pre;">    </span><b style="line-height: 18.46px;">return (random() & 1 ? 1 : -1);</b></font></i></div><div style="line-height: 21.3px;"><i style="line-height: 21.3px;"><font size="2" style="line-height: normal;">       }</font></i></div><div style="line-height: 21.3px;"><i style="line-height: 21.3px;"><font size="2" style="line-height: normal;">  };</font></i></div><div style="line-height: 21.3px;"><i style="line-height: 21.3px;"><font size="2" style="line-height: normal;"><br style="line-height: 18.46px;"></font></i></div><div style="line-height: 21.3px;"><i style="line-height: 21.3px;"><font size="2" style="line-height: normal;">REGISTER_HASH(my_hash);  </font></i></div></div><div style="line-height: 21.3px; color: rgb(68, 68, 68); font-size: 15px; background-color: rgb(255, 255, 255);"><i style="line-height: 21.3px;"><font size="2" style="line-height: normal;"><br style="line-height: 18.46px;"></font></i></div><div style="line-height: 21.3px; color: rgb(68, 68, 68); font-size: 15px; background-color: rgb(255, 255, 255);"><font size="3" style="line-height: normal;">I can get access for it by writing:  </font></div><div style="line-height: 21.3px; color: rgb(68, 68, 68); font-size: 15px; background-color: rgb(255, 255, 255);"><div style="line-height: 21.3px;"><i style="line-height: 21.3px;"><font size="2" style="line-height: normal;">field_list_calculation myhash  {</font></i></div><div style="line-height: 21.3px;"><i style="line-height: 21.3px;"><font size="2" style="line-height: normal;">    input {</font></i></div><div style="line-height: 21.3px;"><i style="line-height: 18.46px; font-size: small;">        hashvalue_list;                               </i><font size="3" style="line-height: normal;"> <span style="line-height: 22.72px;">// </span><u style="line-height: 22.72px;">I dont require this , is this necessary?</u></font></div><div style="line-height: 21.3px;"><i style="line-height: 21.3px;"><font size="2" style="line-height: normal;">    }</font></i></div><div style="line-height: 21.3px;"><i style="line-height: 21.3px;"><font size="2" style="line-height: normal;">    algorithm : my_hash; </font></i></div><div style="line-height: 21.3px;"><i style="line-height: 21.3px;"><font size="2" style="line-height: normal;">    output_width : 16;</font></i></div><div style="line-height: 21.3px;"><i style="line-height: 21.3px;"><font size="2" style="line-height: normal;">}</font></i></div><div style="line-height: 21.3px;"><i style="line-height: 21.3px;"><font size="2" style="line-height: normal;"><br></font></i></div></div><div style="line-height: 21.3px; color: rgb(68, 68, 68); font-size: 15px; background-color: rgb(255, 255, 255);">Then calling in some action : <i style="line-height: 21.3px;"><font size="2" style="line-height: normal;"> modify_field_with_hash_based_offset(mymetadata.val,myhash,0,1000);</font></i></div><div style="line-height: 21.3px; color: rgb(68, 68, 68); font-size: 15px; background-color: rgb(255, 255, 255);"><i style="line-height: 21.3px;"><font size="2" style="line-height: normal;"><br style="line-height: 18.46px;"></font></i></div><div style="line-height: 21.3px; color: rgb(68, 68, 68); font-size: 15px; background-color: rgb(255, 255, 255);"><font size="3" style="line-height: normal;">When I add this in my previous program which implements copy_to_cpu , I can see only 00 00 for both +1 and -1? Is this because negative value support explanation of my previous post applies here? If yes, then for both +1 and -1  it should have come as 01 01.</font></div><div style="line-height: 21.3px; color: rgb(68, 68, 68); font-size: 15px; background-color: rgb(255, 255, 255);"><font size="3" style="line-height: normal;">OR I am writing above functor in wrong way? Please help.</font></div><div style="line-height: 21.3px; color: rgb(68, 68, 68); font-size: 15px; background-color: rgb(255, 255, 255);"><font size="3" style="line-height: normal;"><br style="line-height: 22.72px;"></font></div><div style="line-height: 21.3px; color: rgb(68, 68, 68); font-size: 15px; background-color: rgb(255, 255, 255);"><font size="3" style="line-height: normal;">Thanks,</font></div><div style="line-height: 21.3px; color: rgb(68, 68, 68); font-size: 15px; background-color: rgb(255, 255, 255);"><font size="3" style="line-height: normal;">Swaroop</font></div>                                      </div></body>
</html>