PLearn 0.1
Public Member Functions | Static Public Member Functions | Public Attributes | Static Public Attributes | Protected Member Functions | Static Protected Member Functions | Protected Attributes | Private Types | Private Member Functions | Private Attributes
PLearn::FileVMatrix Class Reference

A VMatrix that exists in a .pmat file (native PLearn matrix format, same as for Mat). More...

#include <FileVMatrix.h>

Inheritance diagram for PLearn::FileVMatrix:
Inheritance graph
[legend]
Collaboration diagram for PLearn::FileVMatrix:
Collaboration graph
[legend]

List of all members.

Public Member Functions

 FileVMatrix ()
 FileVMatrix (const PPath &filename, bool writable_=false)
 opens an existing file
 FileVMatrix (const PPath &filename, int the_length, int the_width, bool force_float=false, bool call_build_=true)
 create a new matrix file
 FileVMatrix (const PPath &filename, int the_length, const TVec< string > &fieldnames)
 create a new matrix file
virtual void updateHeader ()
 Re-write the header with all current field values.
virtual void put (int i, int j, real value)
 This method must be implemented in all subclasses of writable matrices.
virtual void putSubRow (int i, int j, Vec v)
 It is suggested that this method be implemented in subclasses of writable matrices to speed up accesses (default version repeatedly calls put(i,j,value) which may have a significant overhead)
virtual void appendRow (Vec v)
 This method must be implemented for matrices that are allowed to grow.
virtual void flush ()
 For matrices stored on disk, this should flush all pending buffered write operations.
virtual void build ()
 Simply calls inherited::build() then build_().
virtual string classname () const
virtual OptionListgetOptionList () const
virtual OptionMapgetOptionMap () const
virtual RemoteMethodMapgetRemoteMethodMap () const
virtual FileVMatrixdeepCopy (CopiesMap &copies) const
virtual void makeDeepCopyFromShallowCopy (CopiesMap &copies)
 Transform a shallow copy into a deep copy.
virtual ~FileVMatrix ()
 Destructor.
virtual int64_t getSizeOnDisk ()

Static Public Member Functions

static string _classname_ ()
 FileVMatrix.
static OptionList_getOptionList_ ()
static RemoteMethodMap_getRemoteMethodMap_ ()
static Object_new_instance_for_typemap_ ()
static bool _isa_ (const Object *o)
static void _static_initialize_ ()
static const PPathdeclaringFile ()

Public Attributes

int remove_when_done
 Deprecated!
int track_ref
 Deprecated!

Static Public Attributes

static StaticInitializer _static_initializer_

Protected Member Functions

virtual void getNewRow (int i, const Vec &v) const
 This is the only method requiring implementation in subclasses.
virtual void closeCurrentFile ()
 Close the current '.pmat' file.

Static Protected Member Functions

static void declareOptions (OptionList &ol)
 Declare this class' options.

Protected Attributes

PPath filename_
FILE * f
bool file_is_bigendian
bool file_is_float
bool force_float

Private Types

typedef RowBufferedVMatrix inherited

Private Member Functions

void openfile (const PPath &path, const char *mode, PRIntn flags, PRIntn mode2)
void build_ ()
 This does the actual building.
void moveto (int i, int j=0) const

Private Attributes

bool build_new_file

Detailed Description

A VMatrix that exists in a .pmat file (native PLearn matrix format, same as for Mat).

Definition at line 59 of file FileVMatrix.h.


Member Typedef Documentation

Reimplemented from PLearn::RowBufferedVMatrix.

Reimplemented in PLearn::TemporaryFileVMatrix.

Definition at line 64 of file FileVMatrix.h.


Constructor & Destructor Documentation

PLearn::FileVMatrix::FileVMatrix ( )

Definition at line 60 of file FileVMatrix.cc.

References remove_when_done, track_ref, and PLearn::VMatrix::writable.

                        :
    filename_       (""),
    f               (0),
    build_new_file  (false)
{
    writable=true;
    remove_when_done = track_ref = -1;
}
PLearn::FileVMatrix::FileVMatrix ( const PPath filename,
bool  writable_ = false 
)

opens an existing file

Definition at line 69 of file FileVMatrix.cc.

References build_(), remove_when_done, track_ref, and PLearn::VMatrix::writable.

                                                             :
    inherited       (true),
    filename_       (filename.absolute()),
    f               (0),
    build_new_file  (!isfile(filename))
{
    remove_when_done = track_ref = -1;
    writable = writable_;
    build_();
}

Here is the call graph for this function:

PLearn::FileVMatrix::FileVMatrix ( const PPath filename,
int  the_length,
int  the_width,
bool  force_float = false,
bool  call_build_ = true 
)

create a new matrix file

Definition at line 80 of file FileVMatrix.cc.

References build_(), remove_when_done, track_ref, and PLearn::VMatrix::writable.

                                                            :
    inherited       (the_length, the_width, true),
    filename_       (filename.absolute()),
    f               (0),
    file_is_float   (force_float),
    force_float     (force_float),
    build_new_file  (true)
{
    remove_when_done = track_ref = -1;
    writable = true;
    if(call_build_)
        build_();
}

Here is the call graph for this function:

PLearn::FileVMatrix::FileVMatrix ( const PPath filename,
int  the_length,
const TVec< string > &  fieldnames 
)

create a new matrix file

Definition at line 95 of file FileVMatrix.cc.

References build_(), PLearn::VMatrix::declareFieldNames(), remove_when_done, PLearn::VMatrix::saveFieldInfos(), track_ref, and PLearn::VMatrix::writable.

                                                        :
    inherited       (the_length, fieldnames.length(), true),
    filename_       (filename.absolute()),
    f               (0),
    build_new_file  (true)
{
    remove_when_done = track_ref = -1;
    writable = true;
    build_();
    declareFieldNames(fieldnames);
    saveFieldInfos();
}

Here is the call graph for this function:

PLearn::FileVMatrix::~FileVMatrix ( ) [virtual]

Destructor.

Definition at line 366 of file FileVMatrix.cc.

References closeCurrentFile(), PLearn::VMatrix::hasMetaDataDir(), PLearn::VMatrix::isWritable(), and PLearn::VMatrix::saveFieldInfos().

Here is the call graph for this function:


Member Function Documentation

string PLearn::FileVMatrix::_classname_ ( ) [static]

FileVMatrix.

Reimplemented from PLearn::RowBufferedVMatrix.

Reimplemented in PLearn::TemporaryFileVMatrix.

Definition at line 55 of file FileVMatrix.cc.

OptionList & PLearn::FileVMatrix::_getOptionList_ ( ) [static]

Reimplemented from PLearn::RowBufferedVMatrix.

Reimplemented in PLearn::TemporaryFileVMatrix.

Definition at line 55 of file FileVMatrix.cc.

RemoteMethodMap & PLearn::FileVMatrix::_getRemoteMethodMap_ ( ) [static]

Reimplemented from PLearn::RowBufferedVMatrix.

Reimplemented in PLearn::TemporaryFileVMatrix.

Definition at line 55 of file FileVMatrix.cc.

bool PLearn::FileVMatrix::_isa_ ( const Object o) [static]

Reimplemented from PLearn::RowBufferedVMatrix.

Reimplemented in PLearn::TemporaryFileVMatrix.

Definition at line 55 of file FileVMatrix.cc.

Object * PLearn::FileVMatrix::_new_instance_for_typemap_ ( ) [static]

Reimplemented from PLearn::Object.

Reimplemented in PLearn::TemporaryFileVMatrix.

Definition at line 55 of file FileVMatrix.cc.

StaticInitializer FileVMatrix::_static_initializer_ & PLearn::FileVMatrix::_static_initialize_ ( ) [static]

Reimplemented from PLearn::RowBufferedVMatrix.

Reimplemented in PLearn::TemporaryFileVMatrix.

Definition at line 55 of file FileVMatrix.cc.

void PLearn::FileVMatrix::appendRow ( Vec  v) [virtual]

This method must be implemented for matrices that are allowed to grow.

Reimplemented from PLearn::VMatrix.

Definition at line 460 of file FileVMatrix.cc.

References PLearn::TVec< T >::data(), f, file_is_bigendian, file_is_float, PLearn::fwrite_double(), PLearn::fwrite_float(), PLearn::TVec< T >::length(), PLearn::VMatrix::length_, moveto(), PLearn::PR_Write_double(), PLearn::PR_Write_float(), and updateHeader().

Referenced by PLearn::FileVMatrixTest::perform().

{
    moveto(length_,0);
#ifdef USE_NSPR_FILE
    if(file_is_float)
        PR_Write_float(f, v.data(), v.length(), file_is_bigendian);
    else
        PR_Write_double(f, v.data(), v.length(), file_is_bigendian);
#else
    if(file_is_float)
        fwrite_float(f, v.data(), v.length(), file_is_bigendian);
    else
        fwrite_double(f, v.data(), v.length(), file_is_bigendian);
#endif

    length_++;
    updateHeader();
}

Here is the call graph for this function:

Here is the caller graph for this function:

void PLearn::FileVMatrix::build ( ) [virtual]

Simply calls inherited::build() then build_().

Reimplemented from PLearn::VMatrix.

Reimplemented in PLearn::TemporaryFileVMatrix.

Definition at line 119 of file FileVMatrix.cc.

References PLearn::VMatrix::build(), and build_().

Referenced by PLearn::TemporaryFileVMatrix::build(), and makeDeepCopyFromShallowCopy().

Here is the call graph for this function:

Here is the caller graph for this function:

void PLearn::FileVMatrix::build_ ( ) [private]

This does the actual building.

Reimplemented from PLearn::VMatrix.

Reimplemented in PLearn::TemporaryFileVMatrix.

Definition at line 128 of file FileVMatrix.cc.

References PLearn::PPath::absolute(), build_new_file, c, closeCurrentFile(), DATAFILE_HEADERLENGTH, f, file_is_bigendian, file_is_float, filename_, force_float, PLearn::force_mkdir_for_file(), PLearn::force_rmdir(), PLearn::VMatrix::getFieldInfos(), PLearn::Object::info(), PLearn::PPath::isEmpty(), PLearn::isfile(), PLearn::VMatrix::length_, PLearn::VMatrix::loadFieldInfos(), PLearn::VMatrix::map_rs, PLearn::VMatrix::map_sr, moveto(), PLearn::mtime(), openfile(), PLASSERT, PLDEPRECATED, PLERROR, PLWARNING, remove_when_done, PLearn::VMatrix::setMetaDataDir(), PLearn::VMatrix::setMtime(), track_ref, updateHeader(), PLearn::VMatrix::width_, and PLearn::VMatrix::writable.

Referenced by build(), and FileVMatrix().

{
    // Check for deprecated options.
    if (remove_when_done != -1) {
        PLDEPRECATED("In FileVMatrix::build_ - The option 'remove_when_done' "
                     "is now deprecated, please use the "
                     "TemporaryFileVMatrix class instead: this data file "
                     "may thus not be properly deleted");
        PLASSERT( remove_when_done == 0 || remove_when_done == 1 );
    }
    if (track_ref != -1) {
        PLDEPRECATED("In FileVMatrix::build_ - The option 'track_ref' "
                     "is now deprecated, please use the "
                     "TemporaryFileVMatrix class instead: this data file "
                     "may thus not be properly deleted");
        PLASSERT( track_ref == 0 || track_ref == 1 );
    }
    // Since we are going to re-create it, we can close the current f.
    closeCurrentFile();

    // If no file is given, we can stop here.
    if (filename_.isEmpty())
        return;

    char header[DATAFILE_HEADERLENGTH];
    char matorvec[20];
    char datatype[20];
    char endiantype[20];

    if (build_new_file || !isfile(filename_))
        force_mkdir_for_file(filename_);

    if (build_new_file || !isfile(filename_))
    {
        if (!writable)
            PLERROR("In FileVMatrix::build_ - You asked to create a new file (%s), but 'writable' is set to 0 !", filename_.c_str());

        openfile(filename_,"w+b", 
                 PR_RDWR | PR_CREATE_FILE | PR_TRUNCATE, 0666);
        if (!f)
            PLERROR("In FileVMatrix constructor, could not open file %s",filename_.c_str());

#ifdef USEFLOAT
        file_is_float = true;
#endif
#ifdef USEDOUBLE
        file_is_float = false;
#endif
#ifdef LITTLEENDIAN
        file_is_bigendian = false;
#endif
#ifdef BIGENDIAN
        file_is_bigendian = true;
#endif
        if(force_float)
            file_is_float = true;

        updateHeader();

        if(length_ > 0 && width_ > 0)
        {
            // Ensure we can allocate enough space... if len>0
#ifdef USE_NSPR_FILE
            moveto(length_-1,width_-1);
            char c = '\0';
            PR_Write(f, &c, 1);
            PR_Sync(f);
#else
            if( fseek(f, DATAFILE_HEADERLENGTH+length_*width_*sizeof(real)-1, SEEK_SET) <0 )
            {
                perror("");
                PLERROR("In FileVMatrix::build_ - Could not fseek to last byte");
            }
            fputc('\0',f);
#endif
        }

        // Get rid of any pre-existing .metadata :: this ensures that old
        // fieldsizes do not pollute a newly-created FileVMatrix
        force_rmdir(filename_ + ".metadata");
    }
    else
    {
        if (writable)
            openfile(filename_, "r+b", PR_RDWR | PR_CREATE_FILE, 0666);
        else
            openfile(filename_, "rb", PR_RDONLY, 0666);

        if (! f)
            PLERROR("FileVMatrix::build: could not open file %s", filename_.c_str());

#ifdef USE_NSPR_FILE
        PR_Read(f,header,DATAFILE_HEADERLENGTH);
#else
        fread(header,DATAFILE_HEADERLENGTH,1,f);
#endif
        if(header[DATAFILE_HEADERLENGTH-1]!='\n')
            PLERROR("In FileVMatrix constructor, wrong header for PLearn binary matrix format. Please use checkheader (in PLearn/Scripts) to check the file.(0)");
        int file_length, file_width;
        bool need_update_header = false;
        sscanf(header, "%s%d%d%s%s", matorvec, &file_length, &file_width, datatype, endiantype);
        if (file_length == -1 && this->length_ >= 0 && writable) {
            // The length set in the file is not valid, but we have specified a length.
            // This can happen if build() has been called once before the sizes have
            // been specified. In this case we must modify the file's length.
            need_update_header = true;
        } else if (file_length >= 0 && this->length_ >= 0 && file_length != this->length_) {
            PLWARNING("In FileVMatrix::build_ - The length option of the VMatrix and the "
                      "loaded file differ; using the loaded file length (%d instead of %d)",
                      file_length, this->length_);
            this->length_ = file_length;
        } else {
            this->length_ = file_length;
        }

        if (file_width == -1 && this->width_ >= 0 && writable) {
            // Same as above, but for the width.
            need_update_header = true;
        } else if (file_width >= 0 && this->width_ >= 0 && file_width != this->width_) {
            PLWARNING("In FileVMatrix::build_ - The width option of the VMatrix and the "
                      "loaded file differ; using the loaded file width (%d instead of %d)",
                      file_width, this->width_);
            this->width_ = file_width;
        } else {
            this->width_ = file_width;
        }

        if (need_update_header) {
            updateHeader();
        }

        if (strcmp(matorvec,"MATRIX")!=0)
            PLERROR("In FileVMatrix constructor, wrong header for PLearn binary matrix format. Please use checkheader (in PLearn/Scripts) to check the file.(1)");

        if (strcmp(endiantype,"LITTLE_ENDIAN")==0)
            file_is_bigendian = false;
        else if (strcmp(endiantype,"BIG_ENDIAN")==0)
            file_is_bigendian = true;
        else
            PLERROR("In FileVMatrix constructor, wrong header for PLearn binary matrix format. Please use checkheader (in PLearn/Scripts) to check the file.(2)");

        if (strcmp(datatype,"FLOAT")==0)
            file_is_float = true;
        else if (strcmp(datatype,"DOUBLE")==0)
            file_is_float = false;
        else
            PLERROR("In FileVMatrix constructor, wrong header for PLearn binary matrix format. Please use checkheader (in PLearn/Scripts) to check the file.(3)");

        //resize the string mappings
        if (width_ >= 0) {
            map_sr = TVec<map<string,real> >(width_);
            map_rs = TVec<map<real,string> >(width_);
        }
#ifdef USE_NSPR_FILE
        //check if the file have all data
        PRFileInfo64 info;
        if(PR_FAILURE==PR_GetFileInfo64(filename_.absolute().c_str(), &info))
            PLERROR("In FileVMatrix::build_() - can't get file info for file '%s'",
                    filename_.c_str());
        PRInt64 elemsize = file_is_float ? sizeof(float) : sizeof(double);
        PRInt64 expectedsize=DATAFILE_HEADERLENGTH+length_*width_*elemsize;
        if(info.size!=expectedsize)
            PLWARNING("In FileVMatrix::build_() - The file '%s' have a size"
                      " of %ld, expected %ld",
                      filename_.c_str(), (long int)info.size, (long int)expectedsize);
#endif
        
    }

    setMetaDataDir(filename_ + ".metadata");
    setMtime(mtime(filename_));

    if (width_ >= 0)
        getFieldInfos();

    loadFieldInfos();
}

Here is the call graph for this function:

Here is the caller graph for this function:

string PLearn::FileVMatrix::classname ( ) const [virtual]

Reimplemented from PLearn::Object.

Reimplemented in PLearn::TemporaryFileVMatrix.

Definition at line 55 of file FileVMatrix.cc.

void PLearn::FileVMatrix::closeCurrentFile ( ) [protected, virtual]

Close the current '.pmat' file.

Reimplemented in PLearn::TemporaryFileVMatrix.

Definition at line 310 of file FileVMatrix.cc.

References f.

Referenced by build_(), PLearn::TemporaryFileVMatrix::closeCurrentFile(), and ~FileVMatrix().

{
    if (f)
    {
#ifdef USE_NSPR_FILE
        PR_Close(f);
#else
        fclose(f);
#endif
        f = 0;
    }
}

Here is the caller graph for this function:

void PLearn::FileVMatrix::declareOptions ( OptionList ol) [static, protected]

Declare this class' options.

Reimplemented from PLearn::VMatrix.

Reimplemented in PLearn::TemporaryFileVMatrix.

Definition at line 326 of file FileVMatrix.cc.

References PLearn::OptionBase::buildoption, PLearn::declareOption(), PLearn::VMatrix::declareOptions(), filename_, PLearn::OptionBase::learntoption, remove_when_done, and track_ref.

Referenced by PLearn::TemporaryFileVMatrix::declareOptions().

{
    declareOption(ol, "filename", &FileVMatrix::filename_, OptionBase::buildoption, "Filename of the matrix");

    declareOption(ol, "remove_when_done", &FileVMatrix::remove_when_done,
            OptionBase::learntoption,
            "Deprecated option! (use TemporaryFileVMatrix instead).");

    declareOption(ol, "track_ref", &FileVMatrix::track_ref,
            OptionBase::learntoption,
            "Deprecated option! (use TemporaryFileVMatrix instead).");

    inherited::declareOptions(ol);
}

Here is the call graph for this function:

Here is the caller graph for this function:

static const PPath& PLearn::FileVMatrix::declaringFile ( ) [inline, static]

Reimplemented from PLearn::RowBufferedVMatrix.

Reimplemented in PLearn::TemporaryFileVMatrix.

Definition at line 116 of file FileVMatrix.h.

:

FileVMatrix * PLearn::FileVMatrix::deepCopy ( CopiesMap copies) const [virtual]

Reimplemented from PLearn::RowBufferedVMatrix.

Reimplemented in PLearn::TemporaryFileVMatrix.

Definition at line 55 of file FileVMatrix.cc.

void PLearn::FileVMatrix::flush ( ) [virtual]

For matrices stored on disk, this should flush all pending buffered write operations.

Reimplemented from PLearn::VMatrix.

Definition at line 482 of file FileVMatrix.cc.

References f.

Referenced by PLearn::FileVMatrixTest::perform().

{
    if(f)
    {
#ifdef USE_NSPR_FILE
    PR_Sync(f);
#else
    fflush(f);
#endif
    }
}

Here is the caller graph for this function:

void PLearn::FileVMatrix::getNewRow ( int  i,
const Vec v 
) const [protected, virtual]

This is the only method requiring implementation in subclasses.

Implements PLearn::RowBufferedVMatrix.

Definition at line 377 of file FileVMatrix.cc.

References PLearn::TVec< T >::data(), f, file_is_bigendian, file_is_float, PLearn::fread_double(), PLearn::fread_float(), PLearn::TVec< T >::length(), moveto(), PLERROR, PLearn::PR_Read_double(), PLearn::PR_Read_float(), and PLearn::VMatrix::width_.

{
#ifdef BOUNDCHECK
    if(v.length()!=width_)
        PLERROR("In FileVMatrix::getNewRow length of v (%d) differs from matrix width (%d)",v.length(),width_);
#endif

    moveto(i);
#ifdef USE_NSPR_FILE
    if(file_is_float)
        PR_Read_float(f, v.data(), v.length(), file_is_bigendian);
    else
        PR_Read_double(f, v.data(), v.length(), file_is_bigendian);
#else
    if(file_is_float)
        fread_float(f, v.data(), v.length(), file_is_bigendian);
    else
        fread_double(f, v.data(), v.length(), file_is_bigendian);
#endif
}

Here is the call graph for this function:

OptionList & PLearn::FileVMatrix::getOptionList ( ) const [virtual]

Reimplemented from PLearn::Object.

Reimplemented in PLearn::TemporaryFileVMatrix.

Definition at line 55 of file FileVMatrix.cc.

OptionMap & PLearn::FileVMatrix::getOptionMap ( ) const [virtual]

Reimplemented from PLearn::Object.

Reimplemented in PLearn::TemporaryFileVMatrix.

Definition at line 55 of file FileVMatrix.cc.

RemoteMethodMap & PLearn::FileVMatrix::getRemoteMethodMap ( ) const [virtual]

Reimplemented from PLearn::Object.

Reimplemented in PLearn::TemporaryFileVMatrix.

Definition at line 55 of file FileVMatrix.cc.

int64_t PLearn::FileVMatrix::getSizeOnDisk ( ) [virtual]

Reimplemented from PLearn::VMatrix.

Definition at line 541 of file FileVMatrix.cc.

References DATAFILE_HEADERLENGTH, file_is_float, PLearn::VMatrix::length_, and PLearn::VMatrix::width_.

Referenced by PLearn::VMatCommand::run().

Here is the caller graph for this function:

void PLearn::FileVMatrix::makeDeepCopyFromShallowCopy ( CopiesMap copies) [virtual]

Transform a shallow copy into a deep copy.

Reimplemented from PLearn::RowBufferedVMatrix.

Reimplemented in PLearn::TemporaryFileVMatrix.

Definition at line 344 of file FileVMatrix.cc.

References build(), build_new_file, f, PLearn::RowBufferedVMatrix::makeDeepCopyFromShallowCopy(), and PLearn::VMatrix::writable.

Referenced by PLearn::TemporaryFileVMatrix::makeDeepCopyFromShallowCopy().

{
    inherited::makeDeepCopyFromShallowCopy(copies);

    // it is unclear whether f should be shared or not...
    // if we allow multi-threading, we should probably not share it
    // so for now we will not share it. But a cleaner behavoiur would probably be
    // to share it in multiple threads but make sure that getRow, putRow, etc... operations
    // are atomic (no context switch to another thread).

    f = 0;   // Because we will open again the file (f should not be shared).
    // however reopening the file twice in write mode is certainly a VERY bad idea.
    // thus we switch to read-mode 
    build_new_file = false;
    writable = false;

    build(); // To open the file.
}

Here is the call graph for this function:

Here is the caller graph for this function:

void PLearn::FileVMatrix::moveto ( int  i,
int  j = 0 
) const [private]

Definition at line 419 of file FileVMatrix.cc.

References DATAFILE_HEADERLENGTH, f, file_is_float, i, j, and PLearn::VMatrix::width_.

Referenced by appendRow(), build_(), getNewRow(), put(), and putSubRow().

{
#ifdef USE_NSPR_FILE
    PRInt64 offset = i;
    int elemsize = file_is_float ? sizeof(float) : sizeof(double);
    offset *= width_;
    offset += j;
    offset *= elemsize;
    offset += DATAFILE_HEADERLENGTH;
    PR_Seek64(f, offset, PR_SEEK_SET);
#else
    if(file_is_float)
        fseek(f, DATAFILE_HEADERLENGTH+(i*width_+j)*sizeof(float), SEEK_SET);
    else
        fseek(f, DATAFILE_HEADERLENGTH+(i*width_+j)*sizeof(double), SEEK_SET);
#endif
}

Here is the caller graph for this function:

void PLearn::FileVMatrix::openfile ( const PPath path,
const char *  mode,
PRIntn  flags,
PRIntn  mode2 
) [private]

Definition at line 530 of file FileVMatrix.cc.

References PLearn::PPath::absolute(), and f.

Referenced by build_().

                                                       {
#ifdef USE_NSPR_FILE
        f = PR_Open(path.absolute().c_str(), flags, mode2);
#else
        f = fopen(path.absolute().c_str(), mode);
#endif

}

Here is the call graph for this function:

Here is the caller graph for this function:

void PLearn::FileVMatrix::put ( int  i,
int  j,
real  value 
) [virtual]

This method must be implemented in all subclasses of writable matrices.

Sets element (i,j) to value.

Reimplemented from PLearn::VMatrix.

Definition at line 440 of file FileVMatrix.cc.

References f, file_is_bigendian, file_is_float, PLearn::fwrite_double(), PLearn::fwrite_float(), PLearn::RowBufferedVMatrix::invalidateBuffer(), moveto(), PLearn::PR_Write_double(), and PLearn::PR_Write_float().

{
    moveto(i,j);
#ifdef USE_NSPR_FILE
    if(file_is_float)
        PR_Write_float(f,float(value),file_is_bigendian);
    else
        PR_Write_double(f,double(value),file_is_bigendian);
#else
    if(file_is_float)
        fwrite_float(f,float(value),file_is_bigendian);
    else
        fwrite_double(f,double(value),file_is_bigendian);
#endif
    invalidateBuffer();
}

Here is the call graph for this function:

void PLearn::FileVMatrix::putSubRow ( int  i,
int  j,
Vec  v 
) [virtual]

It is suggested that this method be implemented in subclasses of writable matrices to speed up accesses (default version repeatedly calls put(i,j,value) which may have a significant overhead)

Reimplemented from PLearn::VMatrix.

Definition at line 401 of file FileVMatrix.cc.

References PLearn::TVec< T >::data(), f, file_is_bigendian, file_is_float, PLearn::fwrite_double(), PLearn::fwrite_float(), PLearn::RowBufferedVMatrix::invalidateBuffer(), PLearn::TVec< T >::length(), moveto(), PLearn::PR_Write_double(), and PLearn::PR_Write_float().

{
    moveto(i,j);
#ifdef USE_NSPR_FILE
    if(file_is_float)
        PR_Write_float(f, v.data(), v.length(), file_is_bigendian);
    else
        PR_Write_double(f, v.data(), v.length(), file_is_bigendian);
#else
    if(file_is_float)
        fwrite_float(f, v.data(), v.length(), file_is_bigendian);
    else
        fwrite_double(f, v.data(), v.length(), file_is_bigendian);
#endif

    invalidateBuffer();
}

Here is the call graph for this function:

void PLearn::FileVMatrix::updateHeader ( ) [virtual]

Re-write the header with all current field values.

Definition at line 497 of file FileVMatrix.cc.

References DATAFILE_HEADERLENGTH, f, file_is_float, PLearn::VMatrix::length_, PLearn::strlen(), and PLearn::VMatrix::width_.

Referenced by appendRow(), and build_().

                               {
    char header[DATAFILE_HEADERLENGTH];
    string real = "DOUBLE";
    if(file_is_float)
        real = "FLOAT";

#ifdef LITTLEENDIAN
    sprintf(header,"MATRIX %d %d %s LITTLE_ENDIAN", length_, width_, real.c_str());
#endif
#ifdef BIGENDIAN
    sprintf(header,"MATRIX %d %d %s BIG_ENDIAN", length_, width_, real.c_str());
#endif


    int pos = strlen(header);
    for(; pos<DATAFILE_HEADERLENGTH; pos++)
    {
        header[pos] = ' ';
    }
    header[DATAFILE_HEADERLENGTH-1] = '\n';

#ifdef USE_NSPR_FILE
    PR_Seek64(f, 0, PR_SEEK_SET);
    PR_Write(f, header, DATAFILE_HEADERLENGTH);
#else
    fseek(f,0,SEEK_SET);
    fwrite(header,1,DATAFILE_HEADERLENGTH,f);
#endif
}

Here is the call graph for this function:

Here is the caller graph for this function:


Member Data Documentation

Reimplemented from PLearn::RowBufferedVMatrix.

Reimplemented in PLearn::TemporaryFileVMatrix.

Definition at line 116 of file FileVMatrix.h.

Definition at line 81 of file FileVMatrix.h.

Referenced by build_(), and makeDeepCopyFromShallowCopy().

FILE* PLearn::FileVMatrix::f [protected]

Definition at line 75 of file FileVMatrix.h.

Referenced by appendRow(), build_(), getNewRow(), put(), and putSubRow().

Definition at line 77 of file FileVMatrix.h.

Referenced by build_().

Deprecated!

Definition at line 103 of file FileVMatrix.h.

Referenced by build_(), declareOptions(), and FileVMatrix().

Deprecated!

Definition at line 104 of file FileVMatrix.h.

Referenced by build_(), declareOptions(), and FileVMatrix().


The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines