FirteX-高性能全文索引和检索平台

API Documentation


首页 | 名字空间列表 | 类继承关系 | 组合类型列表 | $(BL\录(B | 文件列表 | 名字空间成员 | 组合类型成员 | 文件成员

IndexParameter.h

浏览该文件的文档。
00001 //
00002 // Copyright(C) 2005--2006 Institute of Computing Tech, Chinese Academy of Sciences. 
00003 // All rights reserved.
00004 // This file is part of FirteX (www.firtex.org)
00005 //
00006 // Use of the FirteX is subject to the terms of the software license set forth in 
00007 // the LICENSE file included with this software, and also available at
00008 // http://www.firtex.org/license.html
00009 //
00010 // Author       : 郭瑞杰(GuoRuijie)
00011 // Email        : ruijieguo@software.ict.ac.cn
00012 // Created      : 2005/12/07
00013 //
00014 
00015 #ifndef _INDEXARGUMENT_H
00016 #define _INDEXARGUMENT_H
00017 
00018 #if _MSC_VER > 1000
00019         #pragma once
00020 #endif // _MSC_VER > 1000
00021 
00022 #include "../utility/stdint.h"
00023 #include "Metadata.h"
00024 #include "../document/DocumentSchema.h"
00025 #include "../utility/Config.h"
00026 #include "../utility/FXString.h"
00027 #include <assert.h>
00028 #include <string>
00029 using namespace std;
00030 using namespace firtex::utility;
00031 using namespace firtex::document;
00032 
00033 namespace firtex
00034 {
00035         namespace index
00036         {
00037                 typedef unsigned short param_type;
00038 
00039                 #define PARAMETER_DEFINE(a, value) namespace param { const param_type a = (param_type)(value); }        
00040 
00041                 PARAMETER_DEFINE(File,1)
00042                 PARAMETER_DEFINE(FileW,2)
00043                 PARAMETER_DEFINE(Buffer,3)
00044 
00045                 typedef struct _tagParameter
00046                 {
00047                         param_type at;          
00048                         
00049                         str_t           buffer;         //Buffer
00050                         CFXStringA      file;           //文件路径,ANSI
00051                         CFXStringW      wfile;          //文件路径,UNICODE                      
00052                 }Parameter;
00053 
00054                 class CIndexParameter
00055                 {               
00056                 public:
00057                         CIndexParameter(void);
00058                         CIndexParameter(const CDocumentSchema& schema);
00059                         virtual ~CIndexParameter(void);
00060                 
00061                 public:
00066                         void                            setSchema(const CDocumentSchema& schema);
00071                         CDocumentSchema*        getSchema(){return m_pDocSchema;};
00072 
00076                         bool                            isSchemaModified(){return m_bIsSchemaModified;}
00077 
00082                         void                            setSchemaModified(bool bModified = true){ m_bIsSchemaModified = bModified;}
00083                 public:
00089                         inline void addMetadata(schemaid_t id,const string& value);
00090                         inline void addMetadata(schemaid_t id,const char* value);
00091                         inline void addMetadata(schemaid_t id,const wchar_t* value);
00092                         inline void addMetadata(schemaid_t id,char* value,size_t len,bool bNoCopy);
00093                         inline void addMetadata(schemaid_t id,wchar_t* value,size_t len,bool bNoCopy);
00094                         inline void addMetadata(schemaid_t id,const str_t& value,bool bNoCopy);
00095                         inline void addMetadata(schemaid_t id,const wstr_t& value,bool bNoCopy);
00096                         inline void addMetadata(schemaid_t id,const CNumber& number);
00097                         inline void addMetadata(schemaid_t id,const numbervar& number);
00098                         inline void addMetadata(schemaid_t id,const datarecord& datarec,bool bNoCopy);
00099                 
00100                 public:
00101                         void            startIterator(){m_iterator = 0;}
00102                         bool            hasNext(){return (m_iterator < m_numMetas);}
00103                         CMetadata*      next(){return m_ppMetas[m_iterator++];}
00104                 public:
00108                         Parameter&      getParam(){return m_Param;}
00109 
00114                         void            setParam(const char* filename);
00115 
00120                         void            setParam(const wchar_t* filename);
00121 
00127                         void            setParam(char* buffer,size_t len);
00128 
00129 
00134                         int                     getMetaNum(){return m_numMetas;}
00135 
00141                         CMetadata*      getMetadata(const tchar* name);
00142 
00148                         CMetadata*      getMetadata(schemaid_t id);                     
00149                 public:
00150                         void            cleanup();
00151                         void            applySchema();          
00152                 private:
00153                         Parameter       m_Param;
00154                         CMetadata**     m_ppMetas;              //metadata数组
00155                         int                     m_numMetas;             //metadata数组长度
00156                         int                     m_iterator;             //用于迭代方式访问元数据        
00157 
00158                         bool            m_bIsSchemaModified;    //是否经修改过元数据的schema
00159 
00160                         CDocumentSchema*                m_pDocSchema;   //模式
00161                 };
00162 
00164                 //inline functions
00165                 inline void CIndexParameter::addMetadata(schemaid_t id,const string& value)
00166                 {
00167                         FIRTEX_ASSERT((id >=0 && id < m_numMetas),_T("CIndexParameter::addMetadata(schemaid_t id,const string& value)"));
00168                         m_ppMetas[id]->assign(value.c_str());
00169                 }
00170                 inline void CIndexParameter::addMetadata(schemaid_t id,const char* value)
00171                 {
00172                         FIRTEX_ASSERT((id >=0 && id < m_numMetas),_T("CIndexParameter::addMetadata(schemaid_t id,const char* value)"));
00173                         m_ppMetas[id]->assign(value);
00174                 }
00175                 inline void CIndexParameter::addMetadata(schemaid_t id,const wchar_t* value)
00176                 {
00177                         FIRTEX_ASSERT((id >=0 && id < m_numMetas),_T("CIndexParameter::addMetadata(schemaid_t id,const wchar_t* value)"));
00178                         m_ppMetas[id]->assign(value);
00179                 }
00180                 inline void CIndexParameter::addMetadata(schemaid_t id,char* value,size_t len,bool bNoCopy)
00181                 {
00182                         FIRTEX_ASSERT((id >=0 && id < m_numMetas),_T("CIndexParameter::addMetadata(schemaid_t id,char* value,size_t len,bool bNoCopy)"));
00183                         m_ppMetas[id]->assign(value,len,bNoCopy);                       
00184                 }
00185                 inline void CIndexParameter::addMetadata(schemaid_t id,wchar_t* value,size_t len,bool bNoCopy)
00186                 {
00187                         FIRTEX_ASSERT((id >=0 && id < m_numMetas),_T("CIndexParameter::addMetadata(schemaid_t id,wchar_t* value,size_t len,bool bNoCopy)"));
00188                         m_ppMetas[id]->assign(value,len,bNoCopy);
00189                 }
00190 
00191                 inline void CIndexParameter::addMetadata(schemaid_t id,const str_t& value,bool bNoCopy)
00192                 {
00193                         FIRTEX_ASSERT((id >=0 && id < m_numMetas),_T("CIndexParameter::addMetadata(schemaid_t id,const str_t& value,bool bNoCopy)"));
00194                         m_ppMetas[id]->assign(value.str,value.length,bNoCopy);
00195 
00196                 }
00197                 inline void CIndexParameter::addMetadata(schemaid_t id,const wstr_t& value,bool bNoCopy)
00198                 {
00199                         FIRTEX_ASSERT((id >=0 && id < m_numMetas),_T("CIndexParameter::addMetadata(schemaid_t id,const wstr_t& value,bool bNoCopy)"));
00200                         m_ppMetas[id]->assign(value.str,value.length,bNoCopy);
00201                 }
00202                 inline void CIndexParameter::addMetadata(schemaid_t id,const CNumber& number)
00203                 {
00204                         FIRTEX_ASSERT((id >=0 && id < m_numMetas),_T("CIndexParameter::addMetadata(schemaid_t id,const CNumber& number)"));
00205                         if(m_ppMetas[id]->Index.Analyze)
00206                         {
00207                                 FIRTEX_CLOG(level::warn) << "addMetadata(schemaid_t id,const CNumber& number):Number value can't analyze,discard it." <<endl;
00208                                 return;
00209                         }       
00210                         m_ppMetas[id]->assign(number);
00211                 }
00212                 inline void CIndexParameter::addMetadata(schemaid_t id,const numbervar& number)
00213                 {
00214                         FIRTEX_ASSERT((id >=0 && id < m_numMetas),_T("CIndexParameter::addMetadata(schemaid_t id,const numbervar& number)"));
00215                         if(m_ppMetas[id]->Index.Analyze)
00216                         {
00217                                 FIRTEX_CLOG(level::warn) << "addMetadata(schemaid_t id,const numbervar& number):Number value can't analyze,discard it." <<endl;
00218                                 return;
00219                         }       
00220                         m_ppMetas[id]->assign(number);
00221                 }
00222                 inline void CIndexParameter::addMetadata(schemaid_t id,const datarecord& datarec,bool bNoCopy)
00223                 {
00224                         FIRTEX_ASSERT((id >=0 && id < m_numMetas),_T("CIndexParameter::addMetadata(schemaid_t id,const datarecord& datarec,bool bNoCopy)"));
00225                         if(m_ppMetas[id]->Index.Analyze)
00226                         {
00227                                 FIRTEX_CLOG(level::warn) << "addMetadata(schemaid_t id,const datarecord& datarec,bool bNoCopy):Binary value can't analyze,discard it." <<endl;
00228                                 return;
00229                         }       
00230                         m_ppMetas[id]->assign(datarec,bNoCopy);
00231                 }               
00232 
00233                 inline void CIndexParameter::setParam(const char* filename)
00234                 {
00235                         m_Param.at = param::File;
00236                         m_Param.file = filename;
00237                 }
00238                 
00239                 inline void CIndexParameter::setParam(const wchar_t* filename)
00240                 {
00241                         m_Param.at = param::FileW;
00242                         m_Param.wfile = filename;
00243                 }               
00244                 inline void CIndexParameter::setParam(char* buffer,size_t len)
00245                 {
00246                         m_Param.at = param::Buffer;
00247                         m_Param.buffer.str = buffer;
00248                         m_Param.buffer.length = len;
00249                 }
00250         }
00251 }
00252 
00253 #endif

http://www.firtex.org http://www.sourceforge.net/projects/firtex