00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifdef HAVE_CMPH
00023
00024 #include "CmphStringVectorAdapter.h"
00025
00026 namespace Moses
00027 {
00028
00029 void CmphStringVectorAdapterDispose(void *data, char *key, cmph_uint32 keylen)
00030 {
00031 delete[] key;
00032 }
00033
00034 void CmphStringVectorAdapterRewind(void *data)
00035 {
00036 cmph_vector_t *cmph_vector = (cmph_vector_t *)data;
00037 cmph_vector->position = 0;
00038 }
00039
00040
00041
00042 cmph_io_adapter_t *CmphVectorAdapterNew(std::vector<std::string>& v)
00043 {
00044 cmph_io_adapter_t * key_source = (cmph_io_adapter_t *)malloc(sizeof(cmph_io_adapter_t));
00045 cmph_vector_t * cmph_vector = (cmph_vector_t *)malloc(sizeof(cmph_vector_t));
00046 assert(key_source);
00047 assert(cmph_vector);
00048
00049 cmph_vector->vector = (void *)&v;
00050 cmph_vector->position = 0;
00051 key_source->data = (void *)cmph_vector;
00052 key_source->nkeys = v.size();
00053
00054 return key_source;
00055 }
00056
00057 int CmphVectorAdapterRead(void *data, char **key, cmph_uint32 *keylen)
00058 {
00059 cmph_vector_t *cmph_vector = (cmph_vector_t *)data;
00060 std::vector<std::string>* v = (std::vector<std::string>*)cmph_vector->vector;
00061 size_t size;
00062 *keylen = (*v)[cmph_vector->position].size();
00063 size = *keylen;
00064 *key = new char[size + 1];
00065 std::string temp = (*v)[cmph_vector->position];
00066 strcpy(*key, temp.c_str());
00067 cmph_vector->position = cmph_vector->position + 1;
00068 return (int)(*keylen);
00069 }
00070
00071 void CmphVectorAdapterDispose(void *data, char *key, cmph_uint32 keylen)
00072 {
00073 delete[] key;
00074 }
00075
00076 void CmphVectorAdapterRewind(void *data)
00077 {
00078 cmph_vector_t *cmph_vector = (cmph_vector_t *)data;
00079 cmph_vector->position = 0;
00080 }
00081
00082 cmph_io_adapter_t* CmphVectorAdapter(std::vector<std::string>& v)
00083 {
00084 cmph_io_adapter_t * key_source = CmphVectorAdapterNew(v);
00085
00086 key_source->read = CmphVectorAdapterRead;
00087 key_source->dispose = CmphVectorAdapterDispose;
00088 key_source->rewind = CmphVectorAdapterRewind;
00089 return key_source;
00090 }
00091
00092 }
00093
00094 #endif