X-Git-Url: https://git.donarmstrong.com/?p=rsem.git;a=blobdiff_plain;f=HitContainer.h;h=5dfbf7ea6b401d6e1fbfa52959f28f70d849fbfc;hp=b051ed40ef3fefbde00f7c3892f23e8b71f0e78d;hb=9eef8b58056b7cdaad1b4bdb2b2904d9fc0ff430;hpb=f67ec16ff8add74c17df026f77cf39e5a1aca051 diff --git a/HitContainer.h b/HitContainer.h index b051ed4..5dfbf7e 100644 --- a/HitContainer.h +++ b/HitContainer.h @@ -4,8 +4,9 @@ #include #include #include - #include + +#include "utils.h" #include "GroupInfo.h" template @@ -39,32 +40,32 @@ public: } } - int getN() { return n; } + READ_INT_TYPE getN() { return n; } - int getNHits() { return nhits; } + HIT_INT_TYPE getNHits() { return nhits; } - int calcNumGeneMultiReads(const GroupInfo&); - int calcNumIsoformMultiReads(); + READ_INT_TYPE calcNumGeneMultiReads(const GroupInfo&); + READ_INT_TYPE calcNumIsoformMultiReads(); - int getSAt(int pos) { assert(pos >= 0 && pos <= n); return s[pos]; } + HIT_INT_TYPE getSAt(READ_INT_TYPE pos) { assert(pos >= 0 && pos <= n); return s[pos]; } - HitType& getHitAt(int pos) { assert(pos >= 0 && pos < nhits); return hits[pos]; } + HitType& getHitAt(HIT_INT_TYPE pos) { assert(pos >= 0 && pos < nhits); return hits[pos]; } private: - int n; // n reads in total - int nhits; // # of hits - std::vector s; + READ_INT_TYPE n; // n reads in total + HIT_INT_TYPE nhits; // # of hits + std::vector s; std::vector hits; }; //Each time only read one read's hits. If you want to start over, must call clear() first! template bool HitContainer::read(std::istream& in) { - int tot; + HIT_INT_TYPE tot; if (!(in>>tot)) return false; assert(tot > 0); - for (int i = 0; i < tot; i++) { + for (HIT_INT_TYPE i = 0; i < tot; i++) { HitType hit; if (!hit.read(in)) return false; hits.push_back(hit); @@ -80,9 +81,9 @@ bool HitContainer::read(std::istream& in) { template void HitContainer::write(std::ostream& out) { if (n <= 0) return; - for (int i = 0; i < n; i++) { + for (READ_INT_TYPE i = 0; i < n; i++) { out<::write(std::ostream& out) { } template -int HitContainer::calcNumGeneMultiReads(const GroupInfo& gi) { - int res = 0; +READ_INT_TYPE HitContainer::calcNumGeneMultiReads(const GroupInfo& gi) { + READ_INT_TYPE res = 0; int *sortgids = NULL; - for (int i = 0; i < n; i++) { - int num = s[i + 1] - s[i]; + for (READ_INT_TYPE i = 0; i < n; i++) { + HIT_INT_TYPE num = s[i + 1] - s[i]; sortgids = new int[num]; - for (int j = s[i]; j < s[i + 1]; j++) sortgids[j] = gi.gidAt(hits[j].getSid()); + for (HIT_INT_TYPE j = s[i]; j < s[i + 1]; j++) sortgids[j] = gi.gidAt(hits[j].getSid()); std::sort(sortgids, sortgids + num); if (std::unique(sortgids, sortgids + num) - sortgids > 1) ++res; delete[] sortgids; @@ -107,9 +108,9 @@ int HitContainer::calcNumGeneMultiReads(const GroupInfo& gi) { } template -int HitContainer::calcNumIsoformMultiReads() { - int res = 0; - for (int i = 0; i < n; i++) +READ_INT_TYPE HitContainer::calcNumIsoformMultiReads() { + READ_INT_TYPE res = 0; + for (READ_INT_TYPE i = 0; i < n; i++) if (s[i + 1] - s[i] > 1) ++res; return res; }