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

📄 partition.cc,v

📁 charm是基于垂直数据集挖掘关联规则的一个著名算法
💻 CC,V
字号:
head	1.1;access;symbols;locks	zaki:1.1; strict;comment	@// @;1.1date	2001.06.12.16.41.58;	author zaki;	state Exp;branches;next	;desc@Charm with Hashing.@1.1log@Initial revision@text@#include <errno.h>#include <iostream.h>#include <stdio.h>#include <stdlib.h>#include <strings.h>#include <sys/types.h>#include <unistd.h>#include <sys/stat.h>#include <fcntl.h>#include <sys/mman.h>#include "assoc.h"#include "partition.h"int num_partitions = 1;int *DATAFD, *IDXFD, *IDXFLEN, **ITEMIDX;void partition_alloc(char *dataf, char *idxf){   DATAFD = new int[num_partitions];   IDXFD = new int[num_partitions];   IDXFLEN = new int[num_partitions];   ITEMIDX = new int*[num_partitions];   char tmpnam[300];   for (int i=0; i < num_partitions; i++){      if (num_partitions > 1) sprintf(tmpnam, "%s.P%d", dataf, i);      else sprintf(tmpnam, "%s", dataf);      DATAFD[i] = open(tmpnam, O_RDONLY);      if (DATAFD[i] < 0){         perror("can't open data file");         exit(errno);      }            if (num_partitions > 1) sprintf(tmpnam, "%s.P%d", idxf, i);      else sprintf(tmpnam, "%s", idxf);      IDXFD[i] = open(tmpnam, O_RDONLY);      if (IDXFD[i] < 0){         perror("can't open idx file");         exit(errno);      }      IDXFLEN[i] = lseek(IDXFD[i],0,SEEK_END);      lseek(IDXFD[i],0,SEEK_SET);#ifdef DEC      //cout << "IDXLEN " << IDXFLEN[0] << endl;      //long pgsz = sysconf(_SC_PAGE_SIZE);      //long fl = ((IDXFLEN[i]+pgsz-1)/pgsz)*pgsz;      ITEMIDX[i] = (int *) mmap((char *)NULL, IDXFLEN[i], PROT_READ,                              (MAP_FILE|MAP_VARIABLE|MAP_PRIVATE),                              IDXFD[i], 0);#else      ITEMIDX[i] = (int *) mmap((char *)NULL, IDXFLEN[i], PROT_READ,                              MAP_PRIVATE,IDXFD[i], 0);   #endif      if (ITEMIDX[i] == (int *)-1){         perror("MMAP ERROR:item_idx");         exit(errno);      }   }}void partition_dealloc(){   for (int i=0; i < num_partitions; i++){      close(DATAFD[i]);      close(IDXFD[i]);      munmap((caddr_t)ITEMIDX[i], IDXFLEN[i]);   }   delete [] DATAFD;   delete [] IDXFD;   delete [] IDXFLEN;   delete [] ITEMIDX;}//partition p's sizeint partition_get_blk_sz(int p){   return lseek(DATAFD[p],0,SEEK_END);}//maximum partition sizeint partition_get_max_blksz(){   int max = 0;   int flen;   for (int i=0; i < num_partitions; i++){      flen = lseek(DATAFD[i],0,SEEK_END);      if (max < flen) max = flen;   }   return max;}//read the whole partition into MAINBUFvoid partition_get_blk(int *MAINBUF, int p){   int flen = lseek(DATAFD[p],0,SEEK_END);   cout << "FILESZ " << flen << endl;   lseek(DATAFD[p],0,SEEK_SET);   if (read(DATAFD[p], (char *)MAINBUF, flen) < 0){      perror("read item1");      exit(errno);   }}//support over all partitionsint partition_get_idxsup(int it){   int supsz = 0;   //cout << "IT " << it << " " << ITEMIDX[0][it+1]-ITEMIDX[0][it] << endl;   for (int i=0; i < num_partitions; i++){      supsz += partition_get_lidxsup(i, it);   }   return supsz;}//support only in the local partitionint partition_get_lidxsup(int idx, int it){   int i, sup = 0;   if (ITEMIDX[idx][it] != -1){      i = it+1;      while (ITEMIDX[idx][i] == -1) i++;      sup = ITEMIDX[idx][i]-ITEMIDX[idx][it];   }      return sup;   }//item's indexint partition_get_idx(int idx, int it){   return ITEMIDX[idx][it];}//return index arrayint *partition_idx(int idx){   return ITEMIDX[idx];}int partition_idxval(int it){   for (int i=0; i < num_partitions; i++){      if (ITEMIDX[i][it] > -1) return 1;         }   return -1;}//read item it from all partitionsvoid partition_read_item(int *ival, int it){   int ipos=0;   int supsz;   for (int i=0; i < num_partitions; i++){      supsz = partition_get_lidxsup(i, it);      if (supsz > 0){         lseek(DATAFD[i], ITEMIDX[i][it]*ITSZ, SEEK_SET);         if (read(DATAFD[i], (char *)&ival[ipos], supsz*ITSZ) < 0){            perror("read item1");            exit(errno);         }         ipos+=supsz;      }   }}//read item it only from local partitionvoid partition_lclread_item(int *ival, int pnum, int it){   int supsz;   supsz = partition_get_lidxsup(pnum, it);   if (supsz > 0){      lseek(DATAFD[pnum], ITEMIDX[pnum][it]*ITSZ, SEEK_SET);      if (read(DATAFD[pnum], (char *)ival, supsz*ITSZ) < 0){         perror("read item1");         exit(errno);      }   }}//return the max and min transcation id for partition pnumvoid partition_get_minmaxtid(int pnum, int it, int &minv, int &maxv){   int tid, supsz;   supsz = partition_get_lidxsup(pnum, it);   if (supsz > 0){      lseek(DATAFD[pnum], ITEMIDX[pnum][it]*ITSZ, SEEK_SET);      read(DATAFD[pnum], (char *)&tid, ITSZ);      if (minv > tid) minv = tid;      lseek(DATAFD[pnum], (supsz-2)*ITSZ, SEEK_CUR);      read(DATAFD[pnum], (char *)&tid, ITSZ);      if (maxv < tid) maxv = tid;   }}@

⌨️ 快捷键说明

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