MyHandler.h中的全局函数GetAttribute

//用static修饰使得该全局函数只在MyHandler.h中可见
static bool GetAttribute(const char *s, const char *key, AString *value) {
    //返回值由参数value传回
    //先将value的内存清零
    value->clear();

    //得到关键字key的字符长度
    size_t keyLen = strlen(key);

    //由于传进来的参数的组织方式是
    //每一段为一字符串,段与段之间用分号';'隔开
    //需要查找的关键字key可能在某一段中
    //形如:"*****;*****;key=***;***"
    //循环处理每个段,直到key所在的那个段或者遇到结尾
    for (;;) {
        //跳过该段的空格字符
        while (isspace(*s)) {
            ++s;
        }

        //从位置s开始查找第一个出现的分隔符';'
        //目的是定界一个段
        const char *colonPos = strchr(s, ';');

        //计算该段的长度len
        //如果colonPos == NULL说明从位置s开始到结尾没有分隔符';'
        //则从位置s开始到结尾是最后一段
        //否则从位置s到位置colonPos为一段
        size_t len =
            (colonPos == NULL) ? strlen(s) : colonPos - s;

        //此时该段的实际内容被定界为s[0,len-1]
        if (len >= keyLen + 1 && s[keyLen] == '=' && !strncmp(s, key, keyLen)) {
            //s[keyLen] == '=' 和 !strncmp(s, key, keyLen)为真说明s[0,keyLen-1]为关键字key
            //将该段关键字key=后的内容赋值给value
            //函数返回true,表示成功找到了key所对应的内容
            value->setTo(&s[keyLen + 1], len - keyLen - 1);
            return true;
        }

        if (colonPos == NULL) {
            //代码执行到这里说明
            //首先colonPos == NULL是最后一段,但是
            //并没有从前面的if语句里返回
            //说明直到查找到最后一段也没有找到符合key关键字的一段
            //函数返回false表示查找失败
            return false;
        }

        //迭代处理下一段
        s = colonPos + 1;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
void sendDriverCtrl( int & sendSocket, const double & simTime, const unsigned int & simFrame ) { Framework::RDBHandler myHandler; myHandler.initMsg(); RDB_DRIVER_CTRL_t *myDriver = ( RDB_DRIVER_CTRL_t* ) myHandler.addPackage( simTime, simFrame, RDB_PKG_ID_DRIVER_CTRL ); if ( !myDriver ) return; // do we have a valid nearest object? bool haveSensorObject = ( mNearestObject.base.id > 0 ); // sensor object must not be older than 1.0s double ownSpeed = sqrt( mOwnObject.ext.speed.x * mOwnObject.ext.speed.x + mOwnObject.ext.speed.y * mOwnObject.ext.speed.y ); double accelTgtDist = 0.0; double accelTgtSpeed = ( 30.0 - ownSpeed ) / 5.0; // default speed should be own preferred speed if ( haveSensorObject ) { // let's go for the same speed as preceding vehicle: if ( mNearestObject.ext.speed.x < -1.0e-3 ) accelTgtSpeed = 2.0 * mNearestObject.ext.speed.x / 5.0; else accelTgtSpeed = 0.0; // let's go for a 2s distance double tgtDist = ownSpeed * 2.0; if ( tgtDist < 10.0 ) // minimum distance to keep tgtDist = 10.0; accelTgtDist = ( mNearestObject.base.pos.x - tgtDist ) / 10.0; } fprintf( stderr, "sendDriverCtrl: accelDist = %.5lf, accelSpeed = %.5lf\n", accelTgtDist, accelTgtSpeed ); myDriver->playerId = 1; myDriver->accelTgt = accelTgtDist + accelTgtSpeed; myDriver->validityFlags = RDB_DRIVER_INPUT_VALIDITY_TGT_ACCEL | RDB_DRIVER_INPUT_VALIDITY_ADD_ON; int retVal = send( sendSocket, ( const char* ) ( myHandler.getMsg() ), myHandler.getMsgTotalSize(), 0 ); if ( !retVal ) fprintf( stderr, "sendDriverCtrl: could not send driver control\n" ); else fprintf( stderr, "sentDriverCtrl\n" ); }
07-15
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值