Gk-arrays
Efficient read indexing
|
00001 /****************************************************************************** 00002 * * 00003 * Copyright © 2010-2013 -- IRB/INSERM * 00004 * (Institut de Recherches en Biothérapie / * 00005 * Institut National de la Santé et de la Recherche * 00006 * Médicale) * 00007 * LIFL/INRIA * 00008 * (Laboratoire d'Informatique Fondamentale de * 00009 * Lille / Institut National de Recherche en * 00010 * Informatique et Automatique) * 00011 * LIRMM/CNRS * 00012 * (Laboratoire d'Informatique, de Robotique et de * 00013 * Microélectronique de Montpellier / * 00014 * Centre National de la Recherche Scientifique) * 00015 * LITIS * 00016 * (Laboratoire d'Informatique, du Traitement de * 00017 * l'Information et des Systèmes). * 00018 * * 00019 * * 00020 * Auteurs/Authors: Nicolas PHILIPPE <nicolas.philippe@lirmm.fr> * 00021 * Mikaël SALSON <mikael.salson@lifl.fr> * 00022 * Thierry LECROQ <thierry.lecroq@univ-rouen.fr> * 00023 * Martine LÉONARD <Martine.Leonard@univ-rouen.fr> * 00024 * Éric RIVALS <eric.rivals@lirmm.fr> * 00025 * * 00026 * Programmeurs * 00027 * /Progammers: Nicolas PHILIPPE <nicolas.philippe@lirmm.fr> * 00028 * Mikaël SALSON <mikael.salson@lifl.fr> * 00029 * * 00030 * Contact: Gk-Arrays list <crac-gkarrays@lists.gforge.inria.fr> * 00031 * * 00032 * ------------------------------------------------------------------------- * 00033 * * 00034 * Ce fichier fait partie de la librairie Gk-arrays. * 00035 * * 00036 * La librairie Gk-arrays a pour objectif d'indexer de grands ensembles de * 00037 * lectures de séquences issues du séquençage haut-débit. * 00038 * * 00039 * Ce logiciel est régi par la licence CeCILL-C soumise au droit français et * 00040 * respectant les principes de diffusion des logiciels libres. Vous pouvez * 00041 * utiliser, modifier et/ou redistribuer ce programme sous les conditions de * 00042 * la licence CeCILL-C telle que diffusée par le CEA, le CNRS et l'INRIA sur * 00043 * le site "http://www.cecill.info". * 00044 * * 00045 * En contrepartie de l'accessibilité au code source et des droits de copie, * 00046 * de modification et de redistribution accordés par cette licence, il n'est * 00047 * offert aux utilisateurs qu'une garantie limitée. Pour les mêmes raisons, * 00048 * seule une responsabilité restreinte pèse sur l'auteur du programme, le * 00049 * titulaire des droits patrimoniaux et les concédants successifs. * 00050 * * 00051 * À cet égard l'attention de l'utilisateur est attirée sur les risques * 00052 * associés au chargement, à l'utilisation, à la modification et/ou au * 00053 * développement et à la reproduction du logiciel par l'utilisateur étant * 00054 * donné sa spécificité de logiciel libre, qui peut le rendre complexe à * 00055 * manipuler et qui le réserve donc à des développeurs et des professionnels * 00056 * avertis possédant des connaissances informatiques approfondies. Les * 00057 * utilisateurs sont donc invités à charger et tester l'adéquation du * 00058 * logiciel à leurs besoins dans des conditions permettant d'assurer la * 00059 * sécurité de leurs systêmes et ou de leurs données et, plus généralement, * 00060 * à l'utiliser et l'exploiter dans les mêmes conditions de sécurité. * 00061 * * 00062 * Le fait que vous puissiez accéder à cet en-tête signifie que vous avez * 00063 * pris connaissance de la licence CeCILL-C, et que vous en avez accepté les * 00064 * termes. * 00065 * * 00066 * ------------------------------------------------------------------------- * 00067 * * 00068 * This File is part of the Gk-arrays library. * 00069 * * 00070 * The Gk-arrays library aims at indexing k-factors from a huge set of * 00071 * sequencing reads. * 00072 * * 00073 * This software is governed by the CeCILL-C license under French law and * 00074 * abiding by the rules of distribution of free software. You can use, * 00075 * modify and/ or redistribute the software under the terms of the CeCILL-C * 00076 * license as circulated by CEA, CNRS and INRIA at the following URL * 00077 * "http://www.cecill.info". * 00078 * * 00079 * As a counterpart to the access to the source code and rights to copy, * 00080 * modify and redistribute granted by the license, users are provided only * 00081 * with a limited warranty and the software's author, the holder of the * 00082 * economic rights, and the successive licensors have only limited * 00083 * liability. * 00084 * * 00085 * In this respect, the user's attention is drawn to the risks associated * 00086 * with loading, using, modifying and/or developing or reproducing the * 00087 * software by the user in light of its specific status of free software, * 00088 * that may mean that it is complicated to manipulate, and that also * 00089 * therefore means that it is reserved for developers and experienced * 00090 * professionals having in-depth computer knowledge. Users are therefore * 00091 * encouraged to load and test the software's suitability as regards their * 00092 * requirements in conditions enabling the security of their systems and/or * 00093 * data to be ensured and, more generally, to use and operate it in the same * 00094 * conditions as regards security. * 00095 * * 00096 * The fact that you are presently reading this means that you have had * 00097 * knowledge of the CeCILL-C license and that you accept its terms. * 00098 * * 00099 ******************************************************************************/ 00100 00101 #ifndef SOL_ARRAY_H 00102 #define SOL_ARRAY_H 00103 00104 #include <stdexcept> 00105 #include "gkArraysTypes.h" 00106 #include "bitvector.hxx" 00107 00108 using namespace std; 00109 00110 namespace gkarrays { 00111 00112 typedef enum {SMALL_ARRAY, LARGE_ARRAY, OPTIMAL_ARRAY} array_type; 00113 00121 class SolArray { 00122 public: 00123 array_type type; 00124 uintSA *large; 00125 uint *small; 00126 BitVector<uintSA, uintSA> *bv; 00127 uintSA len; 00128 00133 SolArray(); 00134 00142 SolArray(uintSA nbElements, array_type t); 00143 00150 SolArray(void *ptr, array_type t, uintSA nbElements) throw (invalid_argument); 00151 00157 SolArray(SolArray &sa); 00158 00159 ~SolArray(); 00160 00167 void init(uintSA nbElements, array_type t) ; 00168 00174 uintSA get(uintSA pos); 00175 00179 array_type getType(); 00180 00184 uintSA length(); 00185 00191 void realloc(uintSA nbElements) throw (logic_error); 00192 00199 void set(uintSA pos, uintSA value); 00200 00204 uintSA operator[](uintSA pos); 00205 }; 00206 00207 00208 inline uintSA SolArray::get(uintSA pos) { 00209 switch(type) { 00210 case SMALL_ARRAY: 00211 return small[pos]; 00212 case LARGE_ARRAY: 00213 return large[pos]; 00214 default: 00215 return bv->GetValue(pos); 00216 } 00217 } 00218 00219 inline array_type SolArray::getType() { 00220 return type; 00221 } 00222 00223 inline uintSA SolArray::length() { 00224 return len; 00225 } 00226 00227 inline void SolArray::set(uintSA pos, uintSA value) { 00228 switch(type) { 00229 case SMALL_ARRAY: 00230 small[pos] = value; 00231 break; 00232 case LARGE_ARRAY: 00233 large[pos] = value; 00234 break; 00235 case OPTIMAL_ARRAY: 00236 bv->SetValue(pos, value); 00237 break; 00238 } 00239 } 00240 00241 inline uintSA SolArray::operator[](uintSA pos) { 00242 return get(pos); 00243 } 00244 } 00245 #endif 00246 00247 // Local Variables: 00248 // mode:c++ 00249 // End: