source: ThirdParty/mpqc_open/src/lib/util/psi3/libpsio/get_address.cc

Candidate_v1.6.1
Last change on this file was 860145, checked in by Frederik Heber <heber@…>, 8 years ago

Merge commit '0b990dfaa8c6007a996d030163a25f7f5fc8a7e7' as 'ThirdParty/mpqc_open'

  • Property mode set to 100644
File size: 858 bytes
Line 
1/*!
2** \file get_address.c
3** \ingroup (PSIO)
4*/
5
6#include <util/psi3/libpsio/psio.h>
7
8namespace psi3 {
9namespace 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
17psio_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}
Note: See TracBrowser for help on using the repository browser.