コード例 #1
0
ファイル: ufuncpar.cpp プロジェクト: savnik/LaserNavigation
void UFuncPar::createResources()
{
  UVarPool * pa;
  varInitialized = addVar("initialized", 0.0, "b", "(r) is block initialized OK");
  varImuSource = addVar("imuSource", "imu.rot", "s", "(r) source variable for calculation (typically imu.rot or ifVar.imu.rot)");
  pa = addStruct("state", "Detection state");
  if (pa != NULL)
  {
    vars.scFlag = pa->addVarA("scFlag", "0 0", "b", "(r) Spectral correlation alarm detected and count");
    vars.scFlag->makeTimeSeries(10000, 1.0);
    vars.wg2Flag = pa->addVarA("w2gFlag", "0 0", "b", "(r) Double Weibull GLRT alarm detection and count");
    vars.wg2Flag->makeTimeSeries(10000, 1.0);
    vars.scIndex = pa->addVar("scIndex", 0.4, "d", "(r) Spectral correlation detection value");
    vars.scIndex->makeTimeSeries(10000, 1.0);
    vars.wg2Index = pa->addVar("w2gIndex", 0.4, "d", "(r) Double Weibull GLRT detection value");
    vars.wg2Index->makeTimeSeries(10000, 1.0);
    vars.alertFlag = pa->addVarA("alertFlag", "0 0", "d", "(r) combined alert index flag and count");
    vars.alertFlag->makeTimeSeries(10000, 1.0);
    vars.alertIndex = pa->addVar("alertIndex", 0.4, "d", "(r) combined alert index");
    vars.alertIndex->makeTimeSeries(10000, 1.0);
    vars.roll6h = pa->addVar("roll6h", 0.0, "d", "(r) max roll value the last 6 hours");
    vars.pitch6h = pa->addVar("pitch6h", 0.0, "d", "(r) max pitch value the last '6 hour'");
    vars.alarmCnt6h = pa->addVar("alartCnt6h", 0.0, "d", "(r) number of alarms last '6 hour'");
    vars.roll1min = pa->addVar("roll1min", 0.0, "d", "(r) max roll value the last minute");
    vars.roll1min->makeTimeSeries(3600, 1.0);
    vars.pitch1min = pa->addVar("pitch1min", 0.0, "d", "(r) max pitch value the last minute");
    vars.pitch1min->makeTimeSeries(3600, 1.0);
    vars.alarmCnt1min = pa->addVar("alartCnt1min", 0.0, "d", "(r) number of alarms last minute");
    vars.alarmCnt1min->makeTimeSeries(3600, 1.0);
    vars.cnt = pa->addVar("cnt", 0.0, "d", "(r) Update count");
    vars.time = pa->addVar("time", 0.0, "t", "(r) Time of last update");
    vars.timeLong = pa->addVar("time", 0.0, "t", "(r) Time of last update of long term variables");
    vars.calcTime = pa->addVar("calcTime", 0.0, "t", "(r) time to make last roll calculation (in ms)");
    vars.w2gShape = pa->addVar("w2gShape", 0.75, "d", "(r) Weibull shape parameter in last estimate");
    vars.w2gScale = pa->addVar("w2gScale", 1.00, "d", "(r) Weibull scale value in last estimate");
  }
  pa = addStruct("param", "Detection parameters");
  if (pa != NULL)
  {
      varp.rollT = pa->addVar("rollT", 22.5, "d", "(rw) roll period time (sec)");
      varp.rollW = pa->addVar("rollW", 0.279, "d", "(rw) roll natural frequency rad/sec");
      //varp.updFrq = pa->addVar("updFrq", 5.0, "d", "(rw) update frequency in Hz");
      varp.filterOrder = pa->addVar("filterOrder", 5.0, "d", "(r) filter order");
      varp.fileterBW = pa->addVar("fileterBW", 1.2, "d", "(r) filter bandwidth - factor");
      varp.filterType = pa->addVar("filterType", 1.0, "d", "(r) filter type 1=butterworth");
      varp.scRollPeriods = pa->addVar("scRollPeriods", 3.0, "d", "(rw) number of used roll periods - Spectral analysis");
      varp.wg2RollPeriods = pa->addVar("w2gRollPeriods", 3.0, "d", "(rw) number of used roll periods - Weibull method");
      varp.initRollPeriods = pa->addVar("initRollPeriods", 30.0, "d", "(rw) initial estimate after this number of periods");
      varp.scThreshold = pa->addVar("scThreshold", 0.5, "d", "(rw) spectral corr alarm threshold [0..1]");
      varp.wg2Threshold = pa->addVar("w2gThreshold", 0.5, "d", "(rw) Weibull alarm threshold [0..1]");
      varp.alarmWindLen = pa->addVar("alertWindLen", 2.0, "d", "(rw) size of detection window in roll periods");
      varp.alarmWindOverlap = pa->addVar("alertWindOverlap", 0.0, "d", "(rw) is ???");
      varp.rollMinVar = pa->addVar("rollMinVar", 0.1, "d", "(rw) minimum variance for roll (rad^2)");
      varp.pitchMinVar = pa->addVar("pitchMinVar", 0.1, "d", "(rw) minimum variance for pitch (rad^2)");
      varp.horizon6h = pa->addVar("horizon6h", 360.0, "d", "(rw) number of minutes in '6 hour' period");
      varp.shapeUpdTime = pa->addVar("shapeUpdTime", 1.0, "d", "(rw) time between updates  of long term variables (e.g. shape0)");
      varp.filteredBufferTime = pa->addVar("filteredBufferTime", 300, "d", "(rw) length of buffer (in seconds) for band-pass filtered values.");
  }
}
コード例 #2
0
ファイル: localsview.cpp プロジェクト: dividedmind/kate
void LocalsView::addArray(QTreeWidgetItem *parent, const QString &vString)
{
    // getting here we have this kind of string:
    // "{...}" or "{...}, {...}" or ...
    QTreeWidgetItem *item;
    int count = 1;
    bool inComment = false;
    int index = 0;
    int start = 1;
    int end = 1;

    while (end < vString.size()) {
        if (!inComment) {
            if (vString[end] == '"') inComment = true;
            else if (vString[end] == '}') count--;
            else if (vString[end] == '{') count++;
            if (count == 0) {
                QStringList name;
                name << QString("[%1]").arg(index);
                index++;
                item = new QTreeWidgetItem(parent, name);
                addStruct(item, vString.mid(start, end-start));
                end += 4; // "}, {"
                start = end;
                count = 1;
            }
        }
        else {
            if ((vString[end] == '"') && (vString[end-1] != '\\')) {
                inComment = false;
            }
        }
        end++;
    }
}
コード例 #3
0
ファイル: CodeText.cpp プロジェクト: xylsxyls/xueyelingshuang
bool CodeText::addVar(const std::string& varString)
{
	std::vector<std::string> vec = CStringManager::split(varString, " ");
	if (vec.size() < 3)
	{
		return false;
	}
	std::string note = vec[0];
	std::string type = vec[1];
	bool ptr = false;
	if (CStringManager::Replace(type, "*", "") != 0)
	{
		ptr = true;
	}
	std::string name = vec[2];
	std::string structText;
	int32_t index = 2;
	while (index++ != vec.size() - 1)
	{
		structText += (vec[index] + " ");
	}
	if (!structText.empty())
	{
		structText.pop_back();
	}

	addVar(note, type, name, ptr);
	addInitList(name, ptr ? "nullptr" : structText);
	if (ptr)
	{
		addStruct(type, name, structText);
		addCheck(name);
	}
	return ptr;
}
コード例 #4
0
ファイル: main.c プロジェクト: jns0987654321/CIS_2500
int main(void){
	
    struct node *list;
    short int exit = 0;
    char input;
	
    list = malloc( sizeof(struct node) * 1);
    list->name = NULL;
    list->age = -1;
    list->nextName = NULL;
    list->nextAge = NULL;
	
    do {
		
        printf("1. Add Structure\n2. Remove Structure\n3. Print names\n4. Print ages\n5. Exit\n\nOption: ");
		
        do {
            input = getchar();
        } while (input == '\n');
        while(getchar() != '\n');
		
        switch (input){
            case '1':
                addStruct(list);
                break;
            case '2':
                removeStruct(list);
                break;
            case '3':
                printListByName(list);
                break;
            case '4':
                printListByAge(list);
                break;
            case '5':
                exit = 1;
                break;
        }
		
        printf("\n");
		
    } while (exit == 0);
	
	
    /* Free all by name.  It doesn't matter whether we progress
	 through the list by age or name, as long as we make sure we
	 go all the way through the list. */
    struct node *next;
	
    do {
        next = list->nextName;
        if (list->name != NULL) free(list->name);
        free(list);
        list = next;
    } while (list != NULL);
	
    return 0;
}
コード例 #5
0
ファイル: packetinfo.cpp プロジェクト: xbackupx/showeqx
//----------------------------------------------------------------------
// EQPacketTypeDB
EQPacketTypeDB::EQPacketTypeDB()
  : m_typeSizeDict(127) // increase this number if we ever get >= 97 types
{
  // define the convenience macro used in the generated file
#define AddStruct(typeName) addStruct(#typeName, sizeof(typeName))

  // include the generated file
#include "s_everquest.h"

  // undefine the convenience macro
#undef AddStruct

  // these we add manually to handle strings and octet streams
  addStruct("char", sizeof(char));
  addStruct("uint8_t", sizeof(uint8_t));
  addStruct("none", 0);
  addStruct("unknown", 0);
}
コード例 #6
0
ファイル: uimagepool.cpp プロジェクト: savnik/LaserNavigation
UImage * UImagePool::getImage(unsigned int source, bool mayCreate,
    const unsigned int height, const unsigned int width,
    const int channels, const int depth)

{
  UImgPush * result = NULL;
  UVarPool * imgVar;
  const int MSL = 40;
  char s[MSL];
  if (source < MAX_IMAGES_IN_POOL)
  { // get image pointer
    result = images[source];
    if ((result == NULL) and mayCreate)
    { // create image
      images[source] = new UImgPush(maxi(1, height), maxi(1, width), channels, depth);
      result = images[source];
      result->setCmdExe(cmdexe);
      imagesCnt = maxi(imagesCnt, source + 1);
      // update summary)
      if (varImgCnt != NULL)
      { // there is global variable structures for this image - update 
        int n = varImgCnt->getInt();
        varImgCnt->add(1);
        varImgList->setInt(source, n, true);
        //
        snprintf(s, MSL, "img%d", source);
        imgVar = addStruct(s, "details for image");
        result->createLocalVariables(imgVar);
        result->setTcpPort(23000 + source);
        if (strcasestr(appName, "client") != NULL)
          // we are as client, so show images as default
          varShowDefault->setBool(true);
        if (varShowDefault->getBool())
          result->startShowing(true);
      }
    }
    if (result != NULL)
      result->source = source;
  }
  return result;
}
コード例 #7
0
ファイル: varparser.cpp プロジェクト: atikbif/relkonIDE
void VarParser::searchStructures()
{
    // поиск и удаление структур, перечислений, объединений
    // для удобства все данные в виде сплошной строки
    QString allData;
    foreach (QString str, dataBlock) {
       allData+=str;
    }
    // поиск описания структур
    QRegExp structExpr("struct[\\s\\t\\n]*([\\w]*)[\\s\\t\\n]*\\{([^\\{\\}]*)\\}([^;]*);");
    int pos = 0;
    while(pos>=0) {
        pos = structExpr.indexIn(allData,pos);
        if(pos>=0) {
            QString nameOfType = structExpr.cap(1);
            QString body = structExpr.cap(2);
            QString nameOfVar = structExpr.cap(3);
            addStruct(nameOfType,body,nameOfVar);
            allData.remove(pos,structExpr.matchedLength());
        }
    }
    // поиск переменных реализующих структуры
    QRegExp structVarExpr("struct[\\s\\t\\n]+([\\w]+)[\\s\\t\\n]+([^;\\{\\}]*);");
    pos = 0;
    while(pos>=0) {
        pos = structVarExpr.indexIn(allData,pos);
        if(pos>=0) {
            QString nameOfType = structVarExpr.cap(1);
            QString nameOfVar = structVarExpr.cap(2);
            addStructVar(nameOfType,nameOfVar);
            allData.remove(pos,structVarExpr.matchedLength());
        }
    }
    dataBlock.clear();
    dataBlock += allData;
}
コード例 #8
0
ファイル: ucampool.cpp プロジェクト: savnik/LaserNavigation
bool UCamPool::findDevices()
{
  UCamDevBase * testDev = NULL;
  UCamPush * testCam = NULL;
  int i;
  const int MKL = 30;
  char key[MKL];
  const int MSL = 130;
  char s[MSL];
  const char * posName = "none";
  UPosition pos;
  URotation rot;
  UComCam settings;
  int panPos, tiltPos;
  UVarPool * vpd, vpnew;
  enum UCamType {USB, REPLAY, IEEE1394, GIGE, GRABBER};
  UCamType camType;
  //
  lock();
  camType = USB;
  for (i = 0; i < MAX_MOUNTED_CAMERAS; i++)
  { // test if device with this number is known already
    switch (camType)
    { // set new device number within allocated number range
      case REPLAY:
        if (i < FIRST_REPLAY_DEVICE_NUMBER)
          i = FIRST_REPLAY_DEVICE_NUMBER;
        break;
      case IEEE1394:
        if (i < FIRST_IEEE1394_DEVICE_NUMBER)
          i = FIRST_IEEE1394_DEVICE_NUMBER;
        break;
      case GIGE:
        if (i < FIRST_GIGE_DEVICE_NUMBER)
          i = FIRST_GIGE_DEVICE_NUMBER;
        break;
      case GRABBER:
        if (i < FIRST_GRABBER_DEVICE_NUMBER)
          i = FIRST_GRABBER_DEVICE_NUMBER;
        break;
      default:
        break;
    }
    // is this device number available already
    testCam = getCam(i);
    if (testCam == NULL)
    { // not known to exist, so try make a new camera device
      switch (camType)
      { // need new structure
        case USB:
          testDev = new UCamPwc();
          break;
        case REPLAY:
          testDev = new UCamDevReplay();
          break;
        case IEEE1394:
#ifdef USE_GUPPY
            testDev = new UCamDevGuppy();
#else
            testDev = new UCamDevIeee1394();
#endif
          break;
        case GIGE:
          testDev = new UCamDevGigE();
          break;
        case GRABBER:
          testDev = new UCamDevGrabber();
          break;
        default: break;
      }
      //
      if (testDev == NULL)
      {
        if (camType >= GRABBER)
          break;
        // continue with next type
        camType = UCamType(camType + 1);
        continue;
      }
      // camera is not set before, so test
      testDev->setDeviceNumber(i);
      if (testDev->deviceExist())
      { // try open this device number
        testDev->openDeviceDefault();
      }
      if (not testDev->isCameraOpen())
        // no such camera type - advance to next
        camType = UCamType(camType + 1);
      else
      { // camera can be opened - register
        // debug print
        // printf("New device %d : %s\n", i, testDev->getCameraName());
        // debug end
        if (true)
        { // create a camera for the device
          testCam = new UCamPush(testDev);
          // allow push commands
          testCam->setCmdExe(cmdExe);
          // set image logger
          testCam->setImageLogging(imageLog);
          // get default lens and position data from camera type
          snprintf(key, MKL, "device%d", i);
          // load relevant settings to camera structure.
          settings.setFromCam(testDev, true, true);
          vpd = getVarPool()->getStruct(key);
          if (vpd == NULL)
          {
            snprintf(s, MSL, "a %s camera device", testDev->getCameraName());
            vpd = addStruct(key, s, true);
            if (vpd == NULL)
              printf("Failed to make global variable structure for camera\n");
          }
          if (vpd != NULL)
            testCam->setVarPool(vpd);
          //vpd->addVar("open", 0.0, "d", "is device open");
          //vpd->addVar("imageCnt", 0.0, "d", "number of images fetched");
          // set also pan-tilt position
          if (i < 7 and testCam->setPantiltStatus())
          { // reset to home
            testCam->pantiltToHomePosition();
            panPos = 0; // ini.intGet(posName, "panPos", 0);
            tiltPos = 0; //ini.intGet(posName, "tiltPos", 0);
            // debug
            // printf("Cam %s 1 pan %d, tilt %d\n", posName,
            //       testCam->getPanPos(), testCam->getTiltPos());
            // debug end
            if ((panPos != 0) or (tiltPos != 0))
            {
              Wait(3.5);
              testCam->pantiltSetPosition(false, panPos, tiltPos);
              // debug
              printf("Cam %s 2 pan %d, tilt %d\n", posName,
                    testCam->getPanPos(), testCam->getTiltPos());
              // debug end
            }
          }
        }
        testDev->closeDevice();
        testDev->setInitialized(true);
        // put in pool
        // set device list
        varCams->setInt(i, camCnt, true);
        cam[camCnt++] = testCam;
        varCamsCnt->setInt(camCnt);
        testDev = NULL;
      }
      if (testDev != NULL)
      {
        delete testDev;
        testDev = NULL;
      }
    }
  }
  //
  //
  unlock();
  if (verboseMessages)
    print("Cams:");
  //
  return camCnt > 0;
}
コード例 #9
0
ファイル: localsview.cpp プロジェクト: dividedmind/kate
void LocalsView::addLocal(const QString &vString)
{
    static QRegExp isValue("(\\S*)\\s=\\s(.*)");
    static QRegExp isStruct("\\{\\S*\\s=\\s.*");
    static QRegExp isStartPartial("\\S*\\s=\\s\\S*\\s=\\s\\{");
    static QRegExp isPrettyQList("\\s*\\[\\S*\\]\\s=\\s\\S*");
    static QRegExp isPrettyValue("(\\S*)\\s=\\s(\\S*)\\s=\\s(.*)");
    static QRegExp isThisValue("\\$\\d+");

    if (m_allAdded) {
        clear();
        m_allAdded = false;
    }
    
    if (vString.isEmpty()) {
        m_allAdded = true;
        return;
    }
    if (isStartPartial.exactMatch(vString)) {
        m_local = vString;
        return;
    }
    if (isPrettyQList.exactMatch(vString)) {
        m_local += vString.trimmed();
        if (m_local.endsWith(',')) m_local += ' ';
        return;
    }
    if (vString == "}") {
        m_local += vString;
    }

    QStringList symbolAndValue;
    QString value;
    
    if (m_local.isEmpty()) {
        if (vString == "No symbol table info available.") {
            return; /* this is not an error */
        }
        if (!isValue.exactMatch(vString)) {
            kDebug() << "Could not parse:" << vString;
            return;
        }
        symbolAndValue << isValue.cap(1);
        // check out for "print *this"
        if (isThisValue.exactMatch(symbolAndValue[0])) {
            symbolAndValue[0] = "*this";
        }
        value = isValue.cap(2);
    }
    else {
        if (!isPrettyValue.exactMatch(m_local)) {
            kDebug() << "Could not parse:" << m_local;
            m_local.clear();
            return;
        }
        symbolAndValue << isPrettyValue.cap(1) << isPrettyValue.cap(2);
        value = isPrettyValue.cap(3);
    }

    QTreeWidgetItem *item;
    if (value[0] == '{') {
        if (value[1] == '{') {
            item = new QTreeWidgetItem(this, symbolAndValue);
            addArray(item, value.mid(1, value.size()-2));
        }
        else {
            if (isStruct.exactMatch(value)) {
                item = new QTreeWidgetItem(this, symbolAndValue);
                addStruct(item, value.mid(1, value.size()-2));
            }
            else {
                createWrappedItem(this, symbolAndValue[0], value);
            }
        }
    }
    else {
        createWrappedItem(this, symbolAndValue[0], value);
    }

    m_local.clear();
}
コード例 #10
0
ファイル: localsview.cpp プロジェクト: dividedmind/kate
void LocalsView::addStruct(QTreeWidgetItem *parent, const QString &vString)
{
    static QRegExp isArray("\\{\\.*\\s=\\s.*");
    static QRegExp isStruct("\\.*\\s=\\s.*");
    QTreeWidgetItem *item;
    QStringList symbolAndValue;
    QString subValue;
    int start = 0;
    int end;
    while (start < vString.size()) {
        // Symbol
        symbolAndValue.clear();
        end = vString.indexOf(" = ", start);
        if (end < 0) {
            // error situation -> bail out
            createWrappedItem(parent, QString(), vString.right(start));
            break;
        }
        symbolAndValue << vString.mid(start, end-start);
        //kDebug() << symbolAndValue;
        // Value
        start = end + 3;
        end = start;
        if (vString[start] == '{') {
            start++;
            end++;
            int count = 1;
            bool inComment = false;
            // search for the matching }
            while(end < vString.size()) {
                if (!inComment) {
                    if (vString[end] == '"') inComment = true;
                    else if (vString[end] == '}') count--;
                    else if (vString[end] == '{') count++;
                    if (count == 0) break;
                }
                else {
                    if ((vString[end] == '"') && (vString[end-1] != '\\')) {
                        inComment = false;
                    }
                }
                end++;
            }
            subValue = vString.mid(start, end-start);
            if (isArray.exactMatch(subValue)) {
                item = new QTreeWidgetItem(parent, symbolAndValue);
                addArray(item, subValue);
            }
            else if (isStruct.exactMatch(subValue)) {
                item = new QTreeWidgetItem(parent, symbolAndValue);
                addStruct(item, subValue);
            }
            else {
                createWrappedItem(parent, symbolAndValue[0], vString.mid(start, end-start));
            }
            start = end + 3; // },_
        }
        else {
            // look for the end of the value in the vString
            bool inComment = false;
            while(end < vString.size()) {
                if (!inComment) {
                    if (vString[end] == '"') inComment = true;
                    else if (vString[end] == ',') break;
                }
                else {
                    if ((vString[end] == '"') && (vString[end-1] != '\\')) {
                        inComment = false;
                    }
                }
                end++;
            }
            createWrappedItem(parent, symbolAndValue[0], vString.mid(start, end-start));
            start = end + 2; // ,_
        }
    }
}