这个NMEALIB用的缓冲区思路居然和我的一样,也是先依次处理,等到不够一个完整的语句时,把数据拷贝到缓冲区的最开始,
我还一直以为这种思维不好呢,结果好好研究了一把NWEALIB,原来它也是这样处理的。
看来我的编程思路“三观很正”,
本来很不自信,看完之后,自信心爆棚!
memcpy(parser->buffer + parser->buff_use, buff, buff_sz);
parser->buff_use += buff_sz;
/* parse */
for(;;node = 0)
{
sen_sz = nmea_find_tail( (const char *)parser->buffer + nparsed, (int)parser->buff_use - nparsed, &crc);
if(!sen_sz)
{
if(nparsed)
memcpy( parser->buffer, parser->buffer + nparsed, parser->buff_use -= nparsed);
break;
}
else if(crc >= 0)
{
ptype = nmea_pack_type( (const char *)parser->buffer + nparsed + 1,
parser->buff_use - nparsed - 1);
if(0 == (node = malloc(sizeof(nmeaParserNODE))))
goto mem_fail;