PLearn 0.1
Public Member Functions | Static Protected Attributes
PLearn::ReadAndWriteCommand Class Reference

#include <ReadAndWriteCommand.h>

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

List of all members.

Public Member Functions

 ReadAndWriteCommand ()
virtual void run (const vector< string > &args)
 The actual implementation of the 'ReadAndWriteCommand' command.

Static Protected Attributes

static PLearnCommandRegistry reg_
 This allows to register the 'ReadAndWriteCommand' command in the command registry.

Detailed Description

Definition at line 49 of file ReadAndWriteCommand.h.


Constructor & Destructor Documentation

PLearn::ReadAndWriteCommand::ReadAndWriteCommand ( )

Definition at line 53 of file ReadAndWriteCommand.cc.

                                        :
    PLearnCommand("read_and_write",
                
                  "Used to check (debug) the serialization system",
                
                  "read_and_write <sourcefile> <destfile> [--update] [--mode={plearn_ascii,plearn_binary}] [modification string] ...\n"
                  "Reads an Object (in PLearn serialization format) from the <sourcefile> and writes it to the <destfile>\n"
                  "If the sourcefile ends with a .psave file, then it will not be subjected to macro preprosessing \n"
                  "Otherwise (ex: .plearn .vmat) it will. \n"
                  "If their is modification string in format option=value, the modification will be made to the object before saving\n"
                  "The --update option makes that we generate the file only if we can calculate the modification time of the sourcefile and it is more recent than the destfile."
        )
{}

Member Function Documentation

void PLearn::ReadAndWriteCommand::run ( const vector< string > &  args) [virtual]

The actual implementation of the 'ReadAndWriteCommand' command.

Implements PLearn::PLearnCommand.

Definition at line 68 of file ReadAndWriteCommand.cc.

References PLearn::endl(), PLearn::extract_extension(), i, PLearn::left(), PLearn::mtime(), PLearn::openFile(), PLCHECK, PLearn::PStream::plearn_ascii, PLearn::PStream::plearn_binary, PLERROR, PLearn::pout, PLearn::right(), PLearn::smartLoadObject(), and PLearn::split_on_first().

{
    if(args.size()<2)
        PLERROR("read_and_write takes 2 or more arguments: <sourcefile> <destfile> [--update] [--mode={plearn_ascii,plearn_binary}][modification string] ...");
    string source = args[0];
    string dest = args[1];

    string ext = extract_extension(source);
    PP<Object> o;
    time_t date_src=0;

    //read the file
    o=smartLoadObject(source, date_src);

    uint idx_start=2;
    PStream::mode_t mode = PStream::plearn_ascii;
    for(;idx_start<args.size();){
        if(args[idx_start]=="--update"){
            PLCHECK(date_src>0);
            time_t date_dst=mtime(dest);
            if((date_dst>date_src) && (date_src>0)){
                pout << "The file is up to date. We don't regenerate it."<<endl;
                return;
            }
        } else if(args[idx_start]=="--mode=plearn_ascii"){
            mode=PStream::plearn_ascii;
        } else if(args[idx_start]=="--mode=plearn_binary"){
            mode=PStream::plearn_binary;
        } else
            break;//the rest are modification string
        idx_start++;
    }

    //modif the object
    string left;
    string right;
    for(uint i=idx_start; i<args.size();i++){
        split_on_first(args[i], "=", left, right);
        o->setOption(left, right);
    }

    //write the file
    PStream out = openFile(dest, mode, "w");
    if(!out)
        PLERROR("Could not open file %s for writing",dest.c_str());
    out << *o;
}

Here is the call graph for this function:


Member Data Documentation

This allows to register the 'ReadAndWriteCommand' command in the command registry.

Definition at line 56 of file ReadAndWriteCommand.h.


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