Changeset 452 for trunk/lib/SVNlog.cc


Ignore:
Timestamp:
Aug 17, 2007, 9:03:32 PM (14 years ago)
Author:
Peter Johansson
Message:

fixes #248 and refs #185

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/lib/SVNlog.cc

    r448 r452  
    2525
    2626#include "Commitment.h"
     27#include "LogIterator.h"
    2728#include "SVN.h"
    2829
     30#include <algorithm>
    2931#include <cassert>
    3032#include <string>
     
    3739  SVNlog::SVNlog(void)
    3840  {
    39     assert(date().size()==author().size());
    40     assert(date().size()==revision().size());
    41     assert(date().size()==message().size());
     41    assert(date().empty());
     42    assert(author().empty());
     43    assert(revision().empty());
     44    assert(message().empty());
    4245  }
    4346
     
    5861
    5962 
     63  LogIterator SVNlog::begin() const
     64  {
     65    return LogIterator(*this, 0);
     66  }
     67
     68
     69  LogIterator SVNlog::end() const
     70  {
     71    return LogIterator(*this, revision().size());
     72  }
     73
     74
    6075  bool SVNlog::exist(std::string name) const
    6176  {
     
    6883  Commitment SVNlog::latest_commit(void) const
    6984  {
    70     return Commitment(author().back(), Date(date().back()),
     85    return Commitment(author().back(), date().back(),
    7186                      message().back(), revision().back());
    7287                                             
     
    8499      return c;
    85100    }
    86     return Commitment(author()[dist-1], Date(date()[dist-1]),
     101    return Commitment(author()[dist-1], date()[dist-1],
    87102                      message()[dist-1], revision()[dist-1]);
    88103                                             
     104  }
     105
     106
     107  void SVNlog::push_back(const Commitment& c)
     108  {
     109    lb_.authors.push_back(c.author());
     110    lb_.commit_dates.push_back(c.date());
     111    lb_.msg.push_back(c.message());
     112    lb_.rev.push_back(c.revision());
     113  }
     114
     115
     116  void SVNlog::reserve(size_t i)
     117  {
     118    lb_.authors.reserve(i);
     119    lb_.commit_dates.reserve(i);
     120    lb_.msg.reserve(i);
     121    lb_.rev.reserve(i);
    89122  }
    90123
     
    114147
    115148
     149  void SVNlog::swap(SVNlog& rhs)
     150  {
     151    lb_.authors.swap(rhs.lb_.authors);
     152    lb_.commit_dates.swap(rhs.lb_.commit_dates);
     153    lb_.msg.swap(rhs.lb_.msg);
     154    lb_.rev.swap(rhs.lb_.rev);
     155  }
     156
     157
     158  SVNlog& operator+=(SVNlog& lhs, const SVNlog& rhs)
     159  {
     160    SVNlog log;
     161    LogIterator lhs_iter(lhs.begin());
     162    LogIterator rhs_iter(rhs.begin());
     163    while(lhs_iter<lhs.end() && rhs_iter<rhs.end()) {
     164      if (lhs_iter->revision() < rhs_iter->revision()) {
     165       
     166        log.push_back(*lhs_iter);
     167        ++lhs_iter;
     168      }
     169      else if (rhs_iter->revision()<lhs_iter->revision()) {
     170        log.push_back(*rhs_iter);
     171        ++rhs_iter;
     172      }
     173      else {
     174        log.push_back(*lhs_iter);
     175        ++lhs_iter;
     176        ++rhs_iter;
     177      }
     178    }
     179    while(lhs_iter<lhs.end()) {
     180        log.push_back(*lhs_iter);
     181        ++lhs_iter;
     182    }
     183    while(rhs_iter<rhs.end()) {
     184        log.push_back(*rhs_iter);
     185        ++rhs_iter;
     186    }
     187    lhs.swap(log);
     188    return lhs;
     189  }
     190
    116191}} // end of namespace svndigest and namespace theplu
Note: See TracChangeset for help on using the changeset viewer.