Gk-arrays
Efficient read indexing
solArray.h
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:
 All Classes Functions