~ubuntu-branches/ubuntu/oneiric/mpqc/oneiric

« back to all changes in this revision

Viewing changes to src/lib/util/psi3/libpsio/get_address.cc

  • Committer: Bazaar Package Importer
  • Author(s): Michael Banck
  • Date: 2005-11-27 11:41:49 UTC
  • mfrom: (1.1.2 upstream)
  • Revision ID: james.westby@ubuntu.com-20051127114149-zgz9r3gk50w8ww2q
Tags: 2.3.0-1
* New upstream release.
* debian/rules (SONAME): Activate awk snippet for automatic so-name
  detection again, resulting in a bump to `7' and making a `c2a' for
  the C++ allocator change unnecessary; closes: #339232.
* debian/patches/00list (08_gcc-4.0_fixes): Removed, no longer needed.
* debian/rules (test): Remove workarounds, do not abort build if tests
  fail.
* debian/ref: Removed.
* debian/control.in (libsc): Added Conflict against libsc6c2.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*!
 
2
** \file get_address.c
 
3
** \ingroup (PSIO)
 
4
*/
 
5
 
 
6
#include <util/psi3/libpsio/psio.h>
 
7
 
 
8
namespace psi3 {
 
9
namespace libpsio {
 
10
 
 
11
/*!
 
12
** PSIO_GET_ADDRESS(): Given a starting page/offset and a shift length
 
13
** (in bytes), return the page/offset of the next position in the file.
 
14
** \ingroup(PSIO)
 
15
*/
 
16
 
 
17
psio_address psio_get_address(psio_address start, ULI shift)
 
18
{
 
19
  psio_address address;
 
20
  ULI bytes_left;
 
21
 
 
22
  bytes_left = PSIO_PAGELEN - start.offset; /* Bytes remaining on fpage */
 
23
 
 
24
  if(shift >= bytes_left) { /* Shift to later page */
 
25
      address.page = start.page + (shift - bytes_left)/PSIO_PAGELEN + 1;
 
26
      address.offset = shift - bytes_left -
 
27
                        (address.page - start.page - 1)*PSIO_PAGELEN;
 
28
    }
 
29
  else {  /* Block starts on current page */
 
30
      address.page = start.page;
 
31
      address.offset = start.offset + shift;
 
32
    }
 
33
 
 
34
  return address;
 
35
}
 
36
 
 
37
}
 
38
}