Beispiel #1
0
void TierWNameW::addClicked()
{
    if (!bTier->isChecked() && !bCat->isChecked())
        return;
    QString text = line->text();

    if (text.length() == 0) {
        return;
    }

    if (bTier->isChecked()) {
        emit addNewTier(text);
    } else {
        emit addNewCategory(text);
    }
}
Beispiel #2
0
Category *CategoryManager::setThresholdLevels(
                                                   const char *categoryName,
                                                   int         recordLevel,
                                                   int         passLevel,
                                                   int         triggerLevel,
                                                   int         triggerAllLevel)
{
    BSLS_ASSERT(categoryName);

    if (!Category::areValidThresholdLevels(recordLevel,
                                                passLevel,
                                                triggerLevel,
                                                triggerAllLevel)) {
        return 0;                                                     // RETURN
    }

    d_registryLock.lockReadReserveWrite();
    bslmt::WriteLockGuard<bslmt::ReaderWriterLock> registryGuard(&d_registryLock,
                                                               1);
    CategoryMap::iterator iter = d_registry.find(categoryName);
    if (iter != d_registry.end()) {
        Category *category = d_categories[iter->second];
        category->setLevels(recordLevel,
                            passLevel,
                            triggerLevel,
                            triggerAllLevel);

        return category;                                              // RETURN
    }
    else {
        d_registryLock.upgradeToWriteLock();

        Category *category = addNewCategory(categoryName,
                                                      recordLevel,
                                                      passLevel,
                                                      triggerLevel,
                                                      triggerAllLevel);
        registryGuard.release();
        d_registryLock.unlock();
        bslmt::LockGuard<bslmt::Mutex> ruleSetGuard(&d_ruleSetMutex);

        for (int i = 0; i < RuleSet::maxNumRules(); ++i) {
            const Rule *rule = d_ruleSet.getRuleById(i);
            if (rule && rule->isMatch(category->categoryName())) {
                CategoryManagerImpUtil::enableRule(category, i);
                int threshold = ThresholdAggregate::maxLevel(
                                                      rule->recordLevel(),
                                                      rule->passLevel(),
                                                      rule->triggerLevel(),
                                                      rule->triggerAllLevel());
                if (threshold > category->ruleThreshold()) {
                    CategoryManagerImpUtil::setRuleThreshold(category,
                                                             threshold);
                }
            }
        }

        // No need to update holders since the category was just newly created
        // and thus does not have any linked holders.

        return category;                                              // RETURN
    }
}
Beispiel #3
0
Category *CategoryManager::addCategory(
                                         CategoryHolder *categoryHolder,
                                         const char          *categoryName,
                                         int                  recordLevel,
                                         int                  passLevel,
                                         int                  triggerLevel,
                                         int                  triggerAllLevel)
{
    BSLS_ASSERT(categoryName);

    if (!Category::areValidThresholdLevels(recordLevel,
                                           passLevel,
                                           triggerLevel,
                                           triggerAllLevel)) {
        return 0;                                                     // RETURN
    }

    bslmt::WriteLockGuard<bslmt::ReaderWriterLock> registryGuard(
                                                              &d_registryLock);
    CategoryMap::const_iterator iter = d_registry.find(categoryName);

    if (iter != d_registry.end()) {
        return 0;                                                     // RETURN
    }
    else {
        Category *category = addNewCategory(categoryName,
                                            recordLevel,
                                            passLevel,
                                            triggerLevel,
                                            triggerAllLevel);
        if (categoryHolder) {
            CategoryManagerImpUtil::linkCategoryHolder(category,
                                                       categoryHolder);
        }

        registryGuard.release()->unlock();

        bslmt::LockGuard<bslmt::Mutex> ruleSetGuard(&d_ruleSetMutex);

        for (int i = 0; i < RuleSet::maxNumRules(); ++i) {
            const Rule *rule = d_ruleSet.getRuleById(i);
            if (rule && rule->isMatch(category->categoryName())) {
                CategoryManagerImpUtil::enableRule(category, i);
                int threshold = ThresholdAggregate::maxLevel(
                                                      rule->recordLevel(),
                                                      rule->passLevel(),
                                                      rule->triggerLevel(),
                                                      rule->triggerAllLevel());
                if (threshold > category->ruleThreshold()) {
                    CategoryManagerImpUtil::setRuleThreshold(category,
                                                             threshold);
                }
            }
        }
        // We have a 'writeLock' on 'd_registryLock' so the supplied category
        // holder is the only category holder for the created category.
        if (categoryHolder) {
            categoryHolder->setThreshold(bsl::max(category->threshold(),
                                                  category->ruleThreshold()));
        }

        return category;                                              // RETURN
    }
}