⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tdataviewx.c

📁 Solaris环境下的数据挖掘算法:birch聚类算法。该算法适用于对大量数据的挖掘。
💻 C
📖 第 1 页 / 共 2 页
字号:
#endif    _pstorage.Clear();    _queryProc->BatchQuery(_map, _queryFilter, this, 0, _timestamp);  } else {#ifdef DEBUG    printf("View has no mappings; reporting query as done\n");#endif    ReportQueryDone(0);    DoneMappingIterator(_index);    _map = 0;    _index = -1;  }}void TDataViewX::DerivedAbortQuery(){#ifdef DEBUG    printf("TDataViewX::Abort query, index = %d\n", _index);#endif  if (_map) {    _queryProc->AbortQuery(_map, this);    DOASSERT(_index >= 0, "Invalid iterator index");    DoneMappingIterator(_index);    _map = 0;    _index = -1;  }  // Abort record links whose master this view is  int index = _masterLink.InitIterator();  while(_masterLink.More(index)) {    RecordLink *link = _masterLink.Next(index);    link->Abort();  }  _masterLink.DoneIterator(index);  _dataBin->Final();}Boolean TDataViewX::DisplaySymbols(Boolean state){ #if defined(DEBUG)  printf("TDataViewX::DisplaySymbols(%d)\n", state);#endif  if (state == _dispSymbols)    return state;  Boolean oldState = _dispSymbols;  _dispSymbols = state;#ifdef DEBUG  printf("DisplaySymbols now %s\n", (_dispSymbols ? "on" : "off"));#endif  InvalidatePixmaps();  Refresh();  return oldState;}Boolean TDataViewX::DisplayConnectors(Boolean state){ #if defined(DEBUG)  printf("TDataViewX::DisplayConnectors(%d)\n", state);#endif#if !USE_CONNECTORS  return false;#endif  if (state == _dispConnectors)    return state;  if (!state) {    DOASSERT(_cMap, "No connector mapping");    delete _cMap;    _cMap = NULL;  } else {    DOASSERT(!_cMap, "Unexpected connector mapping");    _cMap = new TDataCMap;    DOASSERT(_cMap, "Could not create connector mapping");    _cMap->SetDefaultColor(GetFgColor());  }  Boolean oldState = _dispConnectors;  _dispConnectors = state;#ifdef DEBUG  printf("DisplayConnectors now %s\n", (_dispConnectors ? "on" : "off"));#endif  InvalidatePixmaps();  Refresh();  return oldState;}/* Query data ready to be returned. Do initialization here. */void TDataViewX::QueryInit(void *userData){   _dataBin->Init(_map, &_queryFilter, GetWindowRep()->TopTransform(),		 _dispSymbols, _dispConnectors, _cMap, this);}void TDataViewX::ReturnGData(TDataMap *mapping, RecId recId,			     void *gdata, int numGData){#if defined(DEBUG)  printf("TDataViewX::ReturnGData()\n");#endif  DOASSERT(_index >= 0, "Invalid iterator index");  mapping->UpdateMaxSymSize(gdata, numGData);  int gRecSize = mapping->GDataRecordSize();  _totalGData += numGData;  _numBatches++;  char *tp = (char *)gdata;  GDataAttrOffset *offset = mapping->GetGDataOffset();  // Can do record elimination only for constant bar shape  Boolean canElimRecords = false;  if (offset->shapeOffset < 0 && mapping->GetDefaultShape() == 2)      canElimRecords = true;  // Collect statistics and update record links only for last mapping  if (!MoreMapping(_index)) {    int firstRec = 0;    for(int i = 0; i < numGData; i++) {      // Extract X, Y, shape, and color information from gdata record      Coord x = GetX(tp, mapping, offset);      Coord y = GetY(tp, mapping, offset);      ShapeID shape = GetShape(tp, mapping, offset);      GlobalColor color = mapping->GetDefaultColor();      if (offset->colorOffset >= 0)	color = *(GlobalColor *)(tp + offset->colorOffset);      Boolean complexShape = mapping->IsComplexShape(shape);      complexShape |= (GetNumDimensions() == 3);      // Compute statistics only for records that match the filter''s      // X range, regardless of the Y boundary      if (x >= _queryFilter.xLow && x <= _queryFilter.xHigh) {	  if (color < MAXCOLOR)	    _stats[color].Sample(x, y);	  _allStats.Sample(x, y);	  _allStats.Histogram(y);	  if(_glist.Size() <= MAX_GSTAT) {	      int X = (int) x;	      BasicStats *bs;	      if(_gstat.Lookup(X, bs)) {		  bs->Sample(x,y);	      } else {		  bs = new BasicStats();		  DOASSERT(bs, "Out of memory");		  bs->Init(0);		  _glist.InsertOrderly(X, 1);		  bs->Sample(x, y);		  _gstat.Insert(X, bs);		  _blist.Insert(bs);	      } 	  }       }      // Contiguous ranges which match the filter''s X *and* Y range      // are stored in the record link      if (!complexShape &&          (x < _queryFilter.xLow || x > _queryFilter.xHigh           || y < _queryFilter.yLow || y > _queryFilter.yHigh)) {	if (i > firstRec)	  WriteMasterLink(recId + firstRec, i - firstRec);	// Next contiguous batch of record id''s starts at i+1	firstRec = i + 1;      }            tp += gRecSize;    }    if (numGData > firstRec)      WriteMasterLink(recId + firstRec, numGData - firstRec);  }    // Draw data only if window is not iconified  if (!Iconified()) {    if (_batchRecs) {      _dataBin->InsertSymbol(recId, gdata, numGData, 0, 1, canElimRecords);#ifdef DEBUG      _dataBin->PrintStat();#endif    } else {      char *ptr = (char *)gdata;      for(int i = 0; i < numGData; i++) {        _dataBin->InsertSymbol(recId, ptr, 1, 0, 1, canElimRecords);        recId++;        ptr += gRecSize;      }    }  }}/* Done with query */void TDataViewX::QueryDone(int bytes, void *userData){#ifdef DEBUG    printf("TDataViewX::Query done, index = %d, bytes = %d\n", _index, bytes);#endif  _pstorage.Clear();  DOASSERT(_index >= 0, "Invalid iterator index");  if (MoreMapping(_index)) {    _map = NextMapping(_index)->map;#ifdef DEBUG    printf("Submitting next query 0x%p\n", _map);#endif    _queryProc->BatchQuery(_map, _queryFilter, this, 0, _timestamp);    return;  }  DoneMappingIterator(_index);  _map = 0;  _index = -1;  _allStats.Done();  _allStats.Report();  for(int i = 0; i < MAXCOLOR; i++)    _stats[i].Done();  PrepareStatsBuffer();  _dataBin->Final();  DrawLegend();  // Finish record links whose master this view is  int index = _masterLink.InitIterator();  while(_masterLink.More(index)) {    RecordLink *link = _masterLink.Next(index);    link->Done();  }  _masterLink.DoneIterator(index);  ReportQueryDone(bytes);}void TDataViewX::ReturnGDataBinRecs(TDataMap *map, void **recs, int numRecs){#ifdef DEBUG  printf("TDataViewX %d recs buf start 0x%p\n", numRecs, recs);#endif  WindowRep *win = GetWindowRep();  if (IsInPileMode()) {    ViewWin *parent = GetParent();    DOASSERT(parent, "View has no parent");    int index = parent->InitIterator();    DOASSERT(parent->More(index), "Parent view has no children");    ViewWin *vw = parent->Next(index);    win = vw->GetWindowRep();    parent->DoneIterator(index);#ifdef DEBUG    printf("Drawing view %s in view %s, window 0x%p\n",           GetName(), vw->GetName(), win);#endif  }        map->DrawGDataArray(this, win, recs, numRecs);}void TDataViewX::ReturnGDataBinConnectors(TDataCMap *cmap,					  Connector **connectors, int num){#ifdef DEBUG  printf("TDataViewX drawing %d connectors\n", num);#endif  for(int i = 0; i < num; i++)    ConnectorShapeRegistrar::DrawConnection(GetWindowRep(), connectors[i]);}void TDataViewX::PrintStat(){  if (Init::PrintViewStat()) {    View::PrintStat();    printf("%d GData records, %d batches, %.2f per batch\n",	   _totalGData, _numBatches, 1.0 * _totalGData / _numBatches);    _dataBin->PrintStat();  }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -