Codebase list splix / 1cd4015d-4c33-46f3-87f0-82c0d142f7db/main src / band.cpp
1cd4015d-4c33-46f3-87f0-82c0d142f7db/main

Tree @1cd4015d-4c33-46f3-87f0-82c0d142f7db/main (Download .tar.gz)

band.cpp @1cd4015d-4c33-46f3-87f0-82c0d142f7db/main

f5f6764
970703d
f5f6764
 
 
 
 
 
 
 
 
 
 
 
 
e6011e5
f5f6764
e6011e5
f5f6764
 
 
970703d
 
 
f5f6764
 
970703d
 
f5f6764
970703d
f5f6764
970703d
 
 
 
 
 
 
 
 
 
f5f6764
 
970703d
f5f6764
970703d
 
 
 
 
 
 
 
 
 
f5f6764
 
 
 
970703d
 
 
 
f5f6764
 
 
 
 
970703d
 
f5f6764
970703d
f5f6764
970703d
 
 
 
 
 
 
 
f5f6764
 
970703d
f5f6764
970703d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
f5f6764
 
970703d
 
/*
 * 	    band.cpp                  (C) 2006-2008, Aurélien Croc (AP²C)
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; version 2 of the License.
 * 
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the
 *  Free Software Foundation, Inc.,
 *  51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 *
 *  $Id: band.cpp 301 2012-02-29 14:11:09Z tillkamppeter $
 * 
 */
#include "band.h"
#include <unistd.h>
#include "errlog.h"
#include "bandplane.h"

/*
 * Constructeur - Destructeur
 * Init - Uninit 
 */
Band::Band()
{
    _bandNr = 0;
    _colors = 0;
    _parent = NULL;
    _planes[0] = NULL;
    _planes[1] = NULL;
    _planes[2] = NULL;
    _planes[3] = NULL;
    _width = 0;
    _height = 0;
    _sibling = NULL;
}

Band::Band(unsigned long nr, unsigned long width, unsigned long height)
{
    _colors = 0;
    _parent = NULL;
    _planes[0] = NULL;
    _planes[1] = NULL;
    _planes[2] = NULL;
    _planes[3] = NULL;
    _sibling = NULL;
    _bandNr = nr;
    _width = width;
    _height = height;
}

Band::~Band()
{
    for (unsigned int i=0; i < _colors; i++)
        delete _planes[i];
    if (_sibling)
        delete _sibling;
}



/*
 * Mise sur disque / Rechargement
 * Swapping / restoring
 */
bool Band::swapToDisk(int fd)
{
    write(fd, &_bandNr, sizeof(_bandNr));
    write(fd, &_colors, sizeof(_colors));
    write(fd, &_width, sizeof(_width));
    write(fd, &_height, sizeof(_height));
    for (unsigned int i=0; i < _colors; i++)
        if (!_planes[i]->swapToDisk(fd))
            return false;
    return true;
}

Band* Band::restoreIntoMemory(int fd)
{
    unsigned char colors;
    Band* band;

    band = new Band();
    read(fd, &band->_bandNr, sizeof(band->_bandNr));
    read(fd, &colors, sizeof(colors));
    read(fd, &band->_width, sizeof(band->_width));
    read(fd, &band->_height, sizeof(band->_height));
    for (unsigned int i=0; i < colors; i++) {
        BandPlane *plane = BandPlane::restoreIntoMemory(fd);
        if (!plane) {
            delete band;
            return NULL;
        }
        band->registerPlane(plane);
    }

    return band;
}

/* vim: set expandtab tabstop=4 shiftwidth=4 smarttab tw=80 cin enc=utf8: */