Beispiel #1
0
sseq
sseq_builder::build_sseq ()
{
  if (verbose)
    {
      fprintf (stderr, "computing spectral sequence...\n");
      fprintf (stderr, "computing E^1...\n");
    }
  
  unsigned dh = 1;
  cancel (dh);
  dh ++;
  
  if (verbose)
    fprintf (stderr, "computing E^1 done.\n");
  
  unsigned i0 = present.head ();
  grading i0gr = C->generator_grading (i0);
  int minh = i0gr.h,
    maxh = i0gr.h,
    minq = i0gr.q,
    maxq = i0gr.q;
  for (ullmanset<1>::const_iter i = present; i; i ++)
    {
      grading igr = C->generator_grading (i.val ());
      if (igr.h < minh)
	minh = igr.h;
      if (igr.h > maxh)
	maxh = igr.h;
      if (igr.q < minq)
	minq = igr.q;
      if (igr.q > maxq)
	maxq = igr.q;
    }
  sseq_bounds b (minh, maxh, minq, maxq);
  sseq r (b);
  
#if 0
  printf ("minh=%d, maxh=%d, minq=%d, maxq=%d\n",
	  minh, maxh, minq, maxq);
#endif
  
  for (;;)
    {
      if (verbose)
	fprintf (stderr, "computing E^%d...\n", dh);
      
      sseq_page pg (b);
      
      basedvector<linear_combination, 1> span;
      for (ullmanset<1>::const_iter i = present; i; i ++)
	{
	  grading igr = C->generator_grading (i.val ());
	  
#if 0
	  printf ("i=%d, igr.h=%d, igr.q=%d\n",
		  i.val (), igr.h, igr.q);
#endif
	  
	  pg.rank[igr.h - minh][igr.q - minq] ++;
	  
	  linear_combination v (C);
	  for (set<unsigned>::const_iter j = im[i.val ()]; j; j ++)
	    {
	      grading jgr = C->generator_grading (j.val ());
	      
	      if (jgr.h - igr.h == (int)dh)
		{
		  assert ((jgr.h - igr.h - 1) * 2 == (jgr.q - igr.q));
		  
		  v.muladd (1, j.val ());
		}
	    }
	  span.append (v);
	}
      
      unsigned dq = (dh - 1) * 2;
      
      mod_span<Z2> span2 (C, span);
      ptr<const module<Z2> > im2 = C->submodule (span2);
      
      for (unsigned i = 1; i <= im2->dim (); i ++)
	{
	  grading igr = im2->generator_grading (i);
	  pg.im_rank[igr.h - dh - minh][igr.q - dq - minq] ++;
	}
      
      r.pages.append (pg);
      
      if (verbose)
	fprintf (stderr, "computing E^%d done.\n", dh);
      
      if (im_zero ())
	break;
      
      cancel (dh);
      dh ++;
    }
  
  if (verbose)
    fprintf (stderr, "computing spectral sequence done.\n");
  
  return r;
}
Beispiel #2
0
void CMailView::CreateDemo(BOOL bRedraw/* = TRUE*/)
{
	CBCGPReportCtrl* pReportCtrl = GetReportCtrl ();
	ASSERT_VALID (pReportCtrl);

	pReportCtrl->RemoveAll ();

	#define NAMES_NUM	7
	LPCTSTR arNames [NAMES_NUM] =
	{
		_T("John Smith"),
		_T("Support Team"),
		_T("Peter Brown"),
		_T("Matt Johnson"),
		_T("James Lee"),
		_T("Customer Service"),
		_T("Webmaster"),
	};

	#define SUBJ_NUM	8
	LPCTSTR arSubjs [SUBJ_NUM] =
	{
		_T("Important information"),
		_T("Customer Newsletter"),
		_T("Question"),
		_T("Business proposal"),
		_T("Request more info about your products"),
		_T("Thank you!"),
		_T("Your application has been approved"),
		_T("Please read this message"),
	};

	srand( (unsigned)time( NULL ) );

	for (int i = 0; i < 100; i++)
	{
		COleDateTime now = COleDateTime::GetCurrentTime ();
		COleDateTimeSpan span (
			Rand (5),
			Rand (23),
			Rand (59),
			0);
		COleDateTimeSpan span2 (
			0,
			Rand (2),
			Rand (59),
			Rand (59));

		AddMail (Rand (2), // Icon
			arNames [Rand (NAMES_NUM)],
			arNames [Rand (NAMES_NUM)],
			arSubjs [Rand (SUBJ_NUM)],
			now - span - span2,
			now - span, 
			Rand (200),
			(IMPORTANCE) Rand (3),
			Rand (2), 
			Rand (7));
	}

	if (bRedraw)
	{
		pReportCtrl->AdjustLayout ();
	}
}
inline
int CompareAppointments (const CBCGPAppointment* pApp1, const CBCGPAppointment* pApp2)
{
	if (pApp1 == pApp2)
	{
		return 0;
	}

	if (pApp1->GetResourceID () < pApp2->GetResourceID ())
	{
		return -1;
	}
	else if (pApp2->GetResourceID () < pApp1->GetResourceID ())
	{
		return 1;
	}

	BOOL bAllOrMulti1 = pApp1->IsMultiDay () || pApp1->IsAllDay ();
	BOOL bAllOrMulti2 = pApp2->IsMultiDay () || pApp2->IsAllDay ();

	if (CBCGPPlannerView::IsOneDay (pApp1->GetStart (), pApp2->GetStart ()))
	{
		if (bAllOrMulti1 && !bAllOrMulti2)
		{
			return -1;
		}
		else if (!bAllOrMulti1 && bAllOrMulti2)
		{
			return 1;
		}
	}

	if (!(bAllOrMulti1 && bAllOrMulti2) || (bAllOrMulti1 && bAllOrMulti2))
	{
		if (pApp1->GetStart () < pApp2->GetStart ())
		{
			return -1;
		}
		else if (pApp2->GetStart () < pApp1->GetStart ())
		{
			return 1;
		}
		else
		{
			COleDateTimeSpan span1 (pApp1->GetDuration ());
			COleDateTimeSpan span2 (pApp2->GetDuration ());

			if (span1 < span2)
			{
				return 1;
			}
			else if (span2 < span1)
			{
				return -1;
			}
		}
	}

	const CString& str1 = pApp1->GetDescription ();
	const CString& str2 = pApp2->GetDescription ();

	if (!str1.IsEmpty () && !str2.IsEmpty ())
	{
		if (_totupper(str1[0]) == _totupper(str2[0]))
		{
			return str1.Compare (str2);
		}
	}

	return str1.CompareNoCase (str2);
}