source: ThirdParty/mpqc_open/src/lib/util/psi3/libpsio/volseek.cc@ 47b463

Action_Thermostats Add_AtomRandomPerturbation Add_RotateAroundBondAction Add_SelectAtomByNameAction Adding_Graph_to_ChangeBondActions Adding_MD_integration_tests Adding_StructOpt_integration_tests AutomationFragmentation_failures Candidate_v1.6.0 Candidate_v1.6.1 ChangeBugEmailaddress ChangingTestPorts ChemicalSpaceEvaluator Combining_Subpackages Debian_Package_split Debian_package_split_molecuildergui_only Disabling_MemDebug Docu_Python_wait EmpiricalPotential_contain_HomologyGraph_documentation Enable_parallel_make_install Enhance_userguide Enhanced_StructuralOptimization Enhanced_StructuralOptimization_continued Example_ManyWaysToTranslateAtom Exclude_Hydrogens_annealWithBondGraph FitPartialCharges_GlobalError Fix_ChronosMutex Fix_StatusMsg Fix_StepWorldTime_single_argument Fix_Verbose_Codepatterns ForceAnnealing_goodresults ForceAnnealing_oldresults ForceAnnealing_tocheck ForceAnnealing_with_BondGraph ForceAnnealing_with_BondGraph_continued ForceAnnealing_with_BondGraph_continued_betteresults ForceAnnealing_with_BondGraph_contraction-expansion GeometryObjects Gui_displays_atomic_force_velocity IndependentFragmentGrids_IntegrationTest JobMarket_RobustOnKillsSegFaults JobMarket_StableWorkerPool JobMarket_unresolvable_hostname_fix ODR_violation_mpqc_open PartialCharges_OrthogonalSummation PythonUI_with_named_parameters QtGui_reactivate_TimeChanged_changes Recreated_GuiChecks RotateToPrincipalAxisSystem_UndoRedo StoppableMakroAction Subpackage_levmar Subpackage_vmg ThirdParty_MPQC_rebuilt_buildsystem TremoloParser_IncreasedPrecision TremoloParser_MultipleTimesteps Ubuntu_1604_changes stable
Last change on this file since 47b463 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: 1.2 KB
Line 
1/*!
2 \file volseek.c
3 \ingroup (PSIO)
4*/
5
6#include <unistd.h>
7#include <util/psi3/libpsio/psio.h>
8
9namespace psi3 {
10namespace libpsio {
11
12/* This is strictly used to avoid overflow errors on lseek() calls */
13#define PSIO_BIGNUM 10000
14
15/*!
16** PSIO_VOLSEEK()
17**
18** \ingroup (PSIO)
19*/
20int psio_volseek(psio_vol *vol, ULI page, ULI offset, ULI numvols)
21{
22 int stream, errcod;
23 ULI bignum, total_offset;
24
25 bignum = PSIO_BIGNUM*numvols;
26
27 stream = vol->stream;
28
29 /* Set file pointer to beginning of file */
30 errcod = lseek(stream, (ULI) 0, SEEK_SET);
31 if(errcod == -1) return(errcod);
32
33 /* lseek() through large chunks of the file to avoid offset overflows */
34 for(; page > bignum; page -= bignum) {
35 total_offset = PSIO_BIGNUM * PSIO_PAGELEN;
36 errcod = lseek(stream, total_offset, SEEK_CUR);
37 if(errcod == -1) return(errcod);
38 }
39
40 /* Now compute the final offset including the page-relative term */
41 total_offset = (ULI) page/numvols; /* This should truncate */
42 total_offset *= PSIO_PAGELEN;
43 total_offset += offset; /* Add the page-relative term */
44 errcod = lseek(stream, total_offset, SEEK_CUR);
45 if(errcod == -1) return(errcod);
46
47 return(0);
48}
49
50}
51}
Note: See TracBrowser for help on using the repository browser.