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."); } }
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++; } }
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; }
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; }
//---------------------------------------------------------------------- // 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); }
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; }
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; }
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; }
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(); }
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; // ,_ } } }