<div dir="ltr"><div class="gmail_default" style="font-family:tahoma,sans-serif;font-size:small;color:rgb(51,102,255)">Hello,</div><div class="gmail_default" style="font-family:tahoma,sans-serif;font-size:small;color:rgb(51,102,255)"><br></div><div class="gmail_default" style="font-family:tahoma,sans-serif;font-size:small;color:rgb(51,102,255)">While the choice of C may not be changed, I would suggest writing your algorithm in Rust </div><div class="gmail_default" style="font-family:tahoma,sans-serif;font-size:small;color:rgb(51,102,255)">and use something like <a href="https://github.com/hansihe/rustler">https://github.com/hansihe/rustler</a>.</div><div class="gmail_default" style="font-family:tahoma,sans-serif;font-size:small;color:rgb(51,102,255)"><br></div><div class="gmail_default" style="font-family:tahoma,sans-serif;font-size:small;color:rgb(51,102,255)">It's still NIF, but Rust will handle bad codes for you, making your NIF safe.</div><div class="gmail_default" style="font-family:tahoma,sans-serif;font-size:small;color:rgb(51,102,255)"><br></div><div class="gmail_default" style="font-family:tahoma,sans-serif;font-size:small;color:rgb(51,102,255)">Just a thought.</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Jul 10, 2017 at 12:32 PM, Dmitry Kolesnikov <span dir="ltr"><<a href="mailto:dmkolesnikov@gmail.com" target="_blank">dmkolesnikov@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word"><div>Hello,</div><div><br></div><div>It looks you are trying to implement a hybrid solution a mix up of Erlang and C code for routing. Unless, I’ve not understood your question. I would either implement A* purely native or purely in Erlang. In both cases, I would target a data structure that best suites your problem and implementation techniques.   </div><div><br></div><div>Let’s say, you’ve made decision to implement A* in C then I would design a NIF API to address problem of A* search rather then memory management. In this case the updateBlock routine becomes internal for your C code.   </div><div><br></div><div>BTW, Have you consider to use Cpp and NIFpp wrapper for Erlang to integrate existed A* algorithms ?</div><div><br></div><div>Best Regards, </div><span class="HOEnZb"><font color="#888888"><div>Dmitry</div></font></span><div><div class="h5"><div><br></div><br><div><blockquote type="cite"><div>On 10 Jul 2017, at 20.03, skyman <<a href="mailto:cloudzen@163.com" target="_blank">cloudzen@163.com</a>> wrote:</div><br class="m_-3092675701573278277Apple-interchange-newline"><div><div style="line-height:1.7;font-size:14px;font-family:Arial"><div>Hi Dmitry,<br><br>Thanks for your reply.<br>The map of our game is large(1000 * 1000 grids). If I use NIF to implement the A Star find path in C, can I allocate the map grid array(1000 * 1000) in C, and when map blocks changed, Erlang calls 'updateBlock' NIF to update the grid state in grid array in C?<br><br></div>Thanks!<br><br><br><br><div style="zoom:1"></div><div id="m_-3092675701573278277divNeteaseMailCard"></div><br>At 2017-07-11 00:33:34, "Dmitry Kolesnikov" <<a href="mailto:dmkolesnikov@gmail.com" target="_blank">dmkolesnikov@gmail.com</a>> wrote:<br> <blockquote id="m_-3092675701573278277isReplyContent" style="PADDING-LEFT:1ex;MARGIN:0px 0px 0px 0.8ex;BORDER-LEFT:#ccc 1px solid"><div>Hello,</div><br><div><blockquote type="cite"><div>On 10 Jul 2017, at 19.11, skyman <<a href="mailto:cloudzen@163.com" target="_blank">cloudzen@163.com</a>> wrote:</div><br class="m_-3092675701573278277Apple-interchange-newline"><div><div style="line-height:1.7;font-size:14px;font-family:Arial"><div><span style="font-family:arial">Hi everybody,</span></div><div><span style="font-family:arial"><br></span></div><div><span style="font-family:arial">Our game is using A Star </span><font face="arial">algorithm to find path. For performance I want to write it in C language, and Erlang calls it by NIF. I don't know whether the map data is maintained in C or in Erlang. Can anyone tell me?<br></font></div></div></div></blockquote><div><br></div><div>Map is native data structure. However, you need to use enif interface to interact with it. </div><div><a href="http://erlang.org/doc/man/erl_nif.html#enif_get_map_value" target="_blank">http://erlang.org/doc/man/erl_<wbr>nif.html#enif_get_map_value</a></div><br><blockquote type="cite"><div><div style="line-height:1.7;font-size:14px;font-family:Arial"><div><font face="arial">In addition, is there any better solution than NIF?<br></font></div></div></div></blockquote><div><br></div><div>I’ve used to solve a “routing” issues on pure Erlang using ETS, lists, etc. However, this mainly depends on your traffic, latency and size of routing tables. It is hard to give a straight forward answer not knowing this figures.      </div><div><br></div><br><blockquote type="cite"><div><div style="line-height:1.7;font-size:14px;font-family:Arial"><div><font face="arial"><br></font></div><div><font face="arial">Thanks very much!</font></div></div></div></blockquote></div><br><div>Best Regards, </div><div>Dmitry</div></blockquote></div><br><br><span title="neteasefooter"><div> <br class="m_-3092675701573278277webkit-block-placeholder"></div></span></div></blockquote></div><br></div></div></div><br>______________________________<wbr>_________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
<a href="http://erlang.org/mailman/listinfo/erlang-questions" rel="noreferrer" target="_blank">http://erlang.org/mailman/<wbr>listinfo/erlang-questions</a><br>
<br></blockquote></div><br></div>