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

📄 ngramcache.cpp.svn-base

📁 解码器是基于短语的统计机器翻译系统的核心模块
💻 SVN-BASE
字号:
/******************************************************************************IrstLM: IRST Language Model ToolkitCopyright (C) 2006 Marcello Federico, ITC-irst Trento, ItalyThis library is free software; you can redistribute it and/ormodify it under the terms of the GNU Lesser General PublicLicense as published by the Free Software Foundation; eitherversion 2.1 of the License, or (at your option) any later version.This library is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNULesser General Public License for more details.You should have received a copy of the GNU Lesser General PublicLicense along with this library; if not, write to the Free SoftwareFoundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA******************************************************************************/#include <iostream>#include <fstream>#include <stdexcept>#include <cassert>#include "math.h"#include "mempool.h"#include "htable.h"#include "ngramcache.h"using namespace std;ngramcache::ngramcache(int n,int size,int maxentries){      ngsize=n;      infosize=size;      maxn=maxentries;      entries=0;      ht=new htable(maxn * 2, ngsize * sizeof(int),INT,NULL); //lower load factor to reduce collisions       mp=new mempool(ngsize * sizeof(int)+infosize,1000000);       accesses=0;      hits=0;    };  ngramcache::~ngramcache(){    ht->stat();//ht->map();    mp->stat();    delete ht;delete mp;};//resize cache to specified number of entriesvoid ngramcache::reset(int n){    ht->stat();    delete ht;delete mp;      if (n>0) maxn=n;    ht=new htable(maxn * 2, ngsize * sizeof(int),INT,NULL); //load factor 2       mp=new mempool(ngsize * sizeof(int)+infosize,1000000);     entries=0;  }char* ngramcache::get(const int* ngp,char* info){           char *found;   // cout << "ngramcache::get() ";    //for (int i=0;i<ngsize;i++) cout << ngp[i] << " "; cout <<"\n";   accesses++;  if ((found=ht->search((char *)ngp,HT_FIND))){    if (info) memcpy(info,found+ngsize*sizeof(int),infosize);    hits++;  };     return found;  };  int ngramcache::add(const int* ngp,const char* info){        char* entry=mp->allocate();    memcpy(entry,(char*) ngp,sizeof(int) * ngsize);        memcpy(entry + ngsize * sizeof(int),(char *)info,infosize);    char *found=ht->search((char *)entry,HT_ENTER);    assert(found == entry); //false if key is already insided    entries++;    return 1;  }  void ngramcache::stat(){   cerr << "ngramcache stats: entries=" << entries << " acc=" << accesses << " hits=" << hits << "\n";};

⌨️ 快捷键说明

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