Beispiel #1
0
void GLaguer::GetPhylipLaguer(const int categs, MDOUBLE alpha, Vdouble & points, Vdouble & weights)
{
  /* calculate rates and probabilities to approximate Gamma distribution
     of rates with "categs" categories and shape parameter "alpha" using
     rates and weights from Generalized Laguerre quadrature */

	points.resize(categs, 0.0);
	weights.resize(categs, 0.0);
	long i;
	raterootarray lgroot; /* roots of GLaguerre polynomials */
	double f, x, xi, y;

	alpha = alpha - 1.0;
	lgroot[1][1] = 1.0+alpha;
	for (i = 2; i <= categs; i++)
	{
		cerr<<lgroot[i][1]<<"\t";
		lgr(i, alpha, lgroot);                   /* get roots for L^(a)_n */
		cerr<<lgroot[i][1]<<endl;
	}
	/* here get weights */
	/* Gamma weights are (1+a)(1+a/2) ... (1+a/n)*x_i/((n+1)^2 [L_{n+1}^a(x_i)]^2)  */
	f = 1;
	for (i = 1; i <= categs; i++)
		f *= (1.0+alpha/i);
	for (i = 1; i <= categs; i++) {
		xi = lgroot[categs][i];
		y = glaguerre(categs+1, alpha, xi);
		x = f*xi/((categs+1)*(categs+1)*y*y);
		points[i-1] = xi/(1.0+alpha);
		weights[i-1] = x;
	}
}
ThreadSafeProcess::~ThreadSafeProcess()
{
    try
    {
        release();
    }
    catch(const Exception& e)
    {
        Logger lgr(COMPONENT_NAME);
        BLOCXX_LOG_DEBUG(lgr, Format("Exception while releasing process: %1", e));
    }
    catch(...)
    {
        // nothing should escape.
        Logger lgr(COMPONENT_NAME);
        BLOCXX_LOG_DEBUG(lgr, "Unknown exception while releasing process.");
    }
}
void AutoDescriptorPolicy::free(handle_type h)
{
#if defined(BLOCXX_WIN32)
	if (h != BLOCXX_INVALID_HANDLE)
	{
		if (!CloseHandle(h))
		{
#if !defined(BLOCXX_NO_EXCEPTIONS)
			String msg;
			System::lastErrorMsg("Closing handle", msg);

			Logger lgr("blocxx");
			BLOCXX_LOG_ERROR(lgr, msg);
#else
			// We can't do any logging without the possibility of throwing an exception.
#endif /* !defined(BLOCXX_NO_EXCEPTIONS) */
		}
	}
#else
	if (h >= 0)
	{
		int rc = 0;
		do
		{
			rc = ::close(h);
		} while (rc < 0 && errno == EINTR);

		if (rc == -1)
		{
#if !defined(BLOCXX_NO_EXCEPTIONS)
			int lerrno = errno;
			Logger lgr("blocxx");
			BLOCXX_LOG_ERROR(lgr, Format("Closing handle %1 failed: %2", h, lerrno));
#else
			// We can't do any logging without the possibility of throwing an exception.
#endif /* !defined(BLOCXX_NO_EXCEPTIONS) */
		}
	}
#endif /* defined(BLOCXX_WIN32) */
}
void
ProviderIFCLoader::loadIFCs(Array<ProviderIFCBaseIFCRef>& ifcs) const
{
	ServiceEnvironmentIFCRef env = getEnvironment();
	LoggerRef lgr(env->getLogger(COMPONENT_NAME));
	int ifcCount = 0;

	StringArray libdirs = env->getMultiConfigItem(ConfigOpts::PROVIDER_IFC_LIBS_opt, String(OW_DEFAULT_PROVIDER_IFC_LIBS).tokenize(), OW_PATHNAME_SEPARATOR);
	for (size_t i = 0; i < libdirs.size(); ++i)
	{
		const String libdir(libdirs[i]);
		OW_LOG_DEBUG(lgr, Format("ProviderIFCBaseIFCLoaderBase::loadIFC getting provider interfaces from: %1", libdir));
		StringArray libs;
		FileSystem::getDirectoryContents(libdir, libs);
		if (libs.size() == 0)
		{
			OW_THROW(ProviderIFCLoaderException, "ProviderIFCBaseIFCLoaderBase::loadIFCs did not find any provider interfaces");
			return;
		}
		for (StringArray::size_type i = 0; i < libs.size(); ++i)
		{
			if (!libs[i].endsWith(OW_SHAREDLIB_EXTENSION))
			{
				continue;
			}
	#ifdef OW_DARWIN
			if (libs[i].indexOf(OW_VERSION) != String::npos)
			{
					continue;
			}
	#endif // OW_DARWIN
			ProviderIFCBaseIFCRef rval;
			ProviderIFCBaseIFCRef pmr;
			rval = createProviderIFCFromLib(libdir + OW_FILENAME_SEPARATOR + libs[i]);
			if (rval)
			{
				ifcCount++;
				ifcs.push_back(rval);
			}
			else
			{
				OW_LOG_ERROR(lgr, Format("Unable to load ProviderIFC library %1", libs[i]));
			}
		}
	}
	OW_LOG_DEBUG(lgr, Format("Number of provider interfaces loaded: %1",
		ifcCount));
}
ProviderIFCBaseIFCRef
ProviderIFCLoaderBase::createProviderIFCFromLib(const String& libname) const
{
	LoggerRef lgr(m_env->getLogger(COMPONENT_NAME));
	OW_LOG_DEBUG(lgr, Format("ProviderIFCBaseIFCLoaderBase::createProviderIFCFromLib loading library %1", libname));
	SharedLibraryRef sl = m_sll->loadSharedLibrary(libname,
		lgr);
	ProviderIFCBaseIFC* ptr = 0;
	if ( sl )
	{
		ptr = SafeLibCreate<ProviderIFCBaseIFC>::create(sl, "createProviderIFC", lgr);
	}
	else
	{
		OW_THROW(ProviderIFCLoaderException, Format("ProviderIFCBaseIFCLoaderBase::createProviderIFCFromLib FAILED loading library %1", libname).c_str());
	}
	ProviderIFCBaseIFCRef retval(sl, ptr);
	return retval;
}
// ------------------------------ protected -------------------------------- //
void KrugovyeChasy::paintEvent(QPaintEvent *e)
{
    static const QPoint chasStrelka[3] = {
        QPoint(7, 8),
        QPoint(-7, 8),
        QPoint(0, -40)
    };
    static const QPoint chastStrelka[3] = {
        QPoint(7, 8),
        QPoint(-7, 8),
        QPoint(0, -70)
    };

    int delta = mPausa ? 91 : 191;

    const QColor chasCvet(127, 0, 127);
    const QColor chastCvet(0, 127, 127, 191);

    const QColor foneCentr(255, 255, 255, delta);
    const QColor foneSer(70, 200, 70, delta);
    const QColor foneKrai(QColor(230, 255, 230));
    const QColor foneTemnKrai(QColor(10, 140, 10));

    QColor chetvertCvet = KDChetvertySutok_Cveta[CHETVERT(mChas)].second;

    static const qreal povorot = 360.0 / 1296.0;

    QPainter painter(this);
    painter.setRenderHint(QPainter::Antialiasing);
    painter.setClipRegion(e->region());

    int side = qMin(width(), height()) - 9;
    // рисуем фон
    if (mEffects) {
        QRadialGradient rgr(width() / 2, height() / 2, side / 2);
        rgr.setColorAt(0.0, foneCentr);
        rgr.setColorAt(0.9, foneSer);
        rgr.setColorAt(1.0, foneKrai);
        rgr.setSpread(QGradient::ReflectSpread);

        QLinearGradient lgr(rect().topLeft(), rect().bottomRight());
        lgr.setColorAt(0, foneKrai);
        lgr.setColorAt(1, foneTemnKrai);

        painter.setPen(QPen(QBrush(lgr), 8.0));
        painter.setBrush(QBrush(rgr));
        painter.drawEllipse(QPoint(width() / 2, height() / 2), side / 2, side / 2);
    }

    // переносим систему координат в центр виджета
    painter.translate(width() / 2, height() / 2);
    painter.scale(side / 200.0, side / 200.0);

    // рисуем часы
    painter.save();
    mEffects ? painter.setPen(Qt::yellow) : painter.setPen(Qt::darkRed);
    for (int i = 1; i <= 16; ++i) {
        painter.drawLine(0, -88, 0, -96);
        painter.rotate(22.5); // 360 / 16
        if (mEffects) {
            painter.save();
            painter.translate(0, -73);
            painter.rotate(-i * 22.5);
            painter.setPen(KDChetvertySutok_Cveta[CHETVERT(i)].second);

            painter.drawText(QRect(-7, -7, 16, 14), Qt::AlignCenter, QString::number(i));
            painter.restore();
        }
    }

    painter.restore();

    // рисуем части
    if (mEffects) {
        painter.save();
        painter.setPen(Qt::yellow);
        for (int i = 0; i < 144; ++i) {
            if ((i % 9) != 0) // 144 / 16
                painter.drawLine(-92, 0, -96, 0);

            painter.rotate(2.5); // 360 / 144
        }

        painter.restore();

        // подписываем час
        QFontMetrics fm(painter.fontMetrics());
        QFont f = font();
        f.setPointSize(8);
        QString chas = KDChasy_Opisaniya[mChas - 1].first;
        int w = fm.width(chas);
        int h = fm.height();

        painter.setFont(f);
        painter.setPen(chetvertCvet);
        painter.drawText(QRect(-w / 2 + 4, -50, w, h), chas);

        // подписываем четверти суток
        f.setPointSize(7);
        h = painter.fontMetrics().height();

        painter.setFont(f);
        painter.setPen(KDChetvertySutok_Cveta[0].second);
        w = fm.width(KDChetvertySutok_Cveta[0].first);
        painter.drawText(QRect(20, -30, w, h), Qt::AlignCenter,
                         KDChetvertySutok_Cveta[0].first);

        painter.setPen(KDChetvertySutok_Cveta[1].second);
        w = fm.width(KDChetvertySutok_Cveta[1].first);
        painter.drawText(QRect(22, 22, w, h), Qt::AlignCenter,
                         KDChetvertySutok_Cveta[1].first);

        painter.setPen(KDChetvertySutok_Cveta[2].second);
        w = fm.width(KDChetvertySutok_Cveta[2].first);
        painter.drawText(QRect(-55, 22, w, h), Qt::AlignCenter,
                         KDChetvertySutok_Cveta[2].first);

        painter.setPen(KDChetvertySutok_Cveta[3].second);
        w = fm.width(KDChetvertySutok_Cveta[3].first);
        painter.drawText(QRect(-55, -30, w, h), Qt::AlignCenter,
                         KDChetvertySutok_Cveta[3].first);

        // рисуем картинка с чертами/резами, рунами, числом часа
        chetvertCvet.setAlpha(100);
        painter.setPen(Qt::darkGreen);
        painter.setBrush(QBrush(chetvertCvet));

        QPixmap pm = mChasyKartinki[mChas - 1];
        QRect r = QRect(-35, 40, 70, 16);
        painter.drawPixmap(r, pm);
        painter.drawRect(r);
    }

    // рисуем часовую стрелку
    painter.save();
    painter.setPen(Qt::NoPen);
    painter.setBrush(chasCvet);
    painter.rotate(povorot * mVolchok / 2304); // 144 * 16
    painter.drawConvexPolygon(chasStrelka, 3);
    painter.restore();

    // рисуем частную(?) стрелку
    painter.save();
    painter.setPen(Qt::NoPen);
    painter.setBrush(chastCvet);
    painter.rotate(povorot * mVolchok / 144);
    painter.drawConvexPolygon(chastStrelka, 3);
    painter.restore();

    // рисуем долевую стрелку
    painter.setBrush(QBrush(Qt::darkMagenta));
    painter.drawEllipse(-1, -1, 2, 2);
    painter.save();
    painter.rotate(povorot * mVolchok);
    painter.setPen(Qt::darkCyan);
    painter.drawLine(0, 5, 0, -85);
    painter.restore();
}
void SAGraphicsLabelItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
                                QWidget *widget)
{
    Q_UNUSED(option);
    Q_UNUSED(widget);

    painter->setRenderHints(painter->renderHints() | QPainter::Antialiasing |
                            QPainter::SmoothPixmapTransform);
    painter->setFont(mShrift);

    QRectF r = rect();
    r.setWidth(r.width() - 1);

    if (!mFone) {
        painter->setPen(mCvet);
#if defined(Q_OS_UNIX)
        painter->drawText(r.adjusted(0, 5, 0, 0), mVyiravn, mPodpis);
#elif defined(Q_OS_WIN)
        painter->drawText(r.adjusted(0, 0, 0, 0), mVyiravn, mPodpis);
#endif
        return;
    }

    QColor bgColor(mCvet);
    bool black = bgColor == Qt::black;
    if (black)
        bgColor = QColor(30, 30, 30);

    QColor lighter1 = bgColor.lighter(black ? 400 : 200);
    QColor lighter2 = bgColor.lighter(black ? 320 : 120);
    QColor darker1 = bgColor.darker(115);

    QLinearGradient lgr(r.topLeft(), r.bottomLeft());
    lgr.setColorAt(0, lighter1);
    lgr.setColorAt(0.4, darker1);
    lgr.setColorAt(0.6, darker1);
    lgr.setColorAt(1, lighter2);

    painter->setPen(bgColor);
    painter->setBrush(QBrush(lgr));
    painter->drawRoundedRect(r, 3, 3);

    painter->setBrush(Qt::white);
    painter->setPen(QPen(Qt::white, 0.01));
    painter->setOpacity(0.3);
    painter->drawRoundedRect(r.x(), r.y(), r.width(), r.height() / 2 - 2, 3, 3);

    painter->setPen(mCvet);
    painter->setBrush(QBrush(QColor(mCvet)));
    painter->setOpacity(1);

    QColor textColor(bgColor);
    if (mCvet == "#ffffff")
        textColor = Qt::darkRed;
    else if (mCvet == "#000000")
        textColor = QColor(240, 240, 240);
    else
        textColor =  QColor(mCvet).darker(200);

    painter->setPen(textColor);
#if defined(Q_OS_UNIX)
    painter->drawText(r.adjusted(0, 5, 0, 0), mVyiravn, mPodpis);
#elif defined(Q_OS_WIN)
    painter->drawText(r.adjusted(0, 0, 0, 0), mVyiravn, mPodpis);
#endif
}