//////////////////////////////////////////////////////////////////////////////////////////
// Author: Manish Agarwal and Gourav Shrivastava  , IIT Delhi 
//////////////////////////////////////////////////////////////////////////////////////////

// Copyright (c) 2021 NVIDIA Corporation.  All rights reserved.
using namespace std;

void dcdreadhead(int *natom, int *nframes, std::istream &infile)
{

    infile.seekg(8, ios::beg);
    infile.read((char *)nframes, sizeof(int));
    infile.seekg(64 * 4, ios::cur);
    infile.read((char *)natom, sizeof(int));
    infile.seekg(1 * 8, ios::cur);
    return;
}

void dcdreadframe(double *x, double *y, double *z, std::istream &infile,
                  int natom, double &xbox, double &ybox, double &zbox)
{

    double d[6];
    for (int i = 0; i < 6; i++)
    {
        infile.read((char *)&d[i], sizeof(double));
    }
    xbox = d[0];
    ybox = d[2];
    zbox = d[5];
    float a, b, c;
    infile.seekg(1 * 8, ios::cur);
    for (int i = 0; i < natom; i++)
    {
        infile.read((char *)&a, sizeof(float));
        x[i] = a;
    }
    infile.seekg(1 * 8, ios::cur);
    for (int i = 0; i < natom; i++)
    {
        infile.read((char *)&b, sizeof(float));
        y[i] = b;
    }
    infile.seekg(1 * 8, ios::cur);
    for (int i = 0; i < natom; i++)
    {
        infile.read((char *)&c, sizeof(float));
        z[i] = c;
    }
    infile.seekg(1 * 8, ios::cur);

    return;
}
