X-Git-Url: http://git.nguyen.vg/gitweb/?a=blobdiff_plain;f=libcds%2Fsrc%2Futils%2Falphabet_mapper_cont.cpp;fp=libcds%2Fsrc%2Futils%2Falphabet_mapper_cont.cpp;h=f6a9cb5a433fe4fa0ec3dd4003937d8e1da4a9fe;hb=52cb7bbcda67f4676335cdd4eb96d4d87ad1445d;hp=0000000000000000000000000000000000000000;hpb=950870fc762cf5c4d551db78bc798b540d893b4a;p=SXSI%2FXMLTree.git diff --git a/libcds/src/utils/alphabet_mapper_cont.cpp b/libcds/src/utils/alphabet_mapper_cont.cpp new file mode 100644 index 0000000..f6a9cb5 --- /dev/null +++ b/libcds/src/utils/alphabet_mapper_cont.cpp @@ -0,0 +1,77 @@ +/* alphabet_mapper_cont.cpp + * Copyright (C) 2008, Francisco Claude, all rights reserved. + * + * alphabet_mapper_cont definition + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 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 of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +#include + +alphabet_mapper_cont::alphabet_mapper_cont(uint * seq, uint n, static_bitsequence_builder *bmb) { + uint max_v = 0; + for(uint i=0;ibuild(bmap,max_v); + delete [] bmap; +} + +alphabet_mapper_cont::alphabet_mapper_cont() { +} + +alphabet_mapper_cont::~alphabet_mapper_cont() { + delete m; +} + +uint alphabet_mapper_cont::map(uint s) { + return m->rank1(s); +} + +uint alphabet_mapper_cont::unmap(uint s) { + return m->select1(s); +} + +uint alphabet_mapper_cont::size() { + return sizeof(alphabet_mapper_cont)+m->size(); +} + +uint alphabet_mapper_cont::save(FILE *fp) { + uint wr = ALPHABET_MAPPER_CONT_HDR; + wr = fwrite(&wr,sizeof(uint),1,fp); + if(wr!=1) return 1; + if(m->save(fp)) return 1; + return 0; +} + +alphabet_mapper_cont * alphabet_mapper_cont::load(FILE * fp) { + uint rd; + if(fread(&rd,sizeof(uint),1,fp)!=1) return NULL; + if(rd!=ALPHABET_MAPPER_CONT_HDR) return NULL; + alphabet_mapper_cont * ret = new alphabet_mapper_cont(); + ret->m = static_bitsequence::load(fp); + if(ret->m==NULL) { + delete ret; + return NULL; + } + return ret; +}