Platform Interface: java.io.FileOutputStream



wrapper java.io.FileOutputStream requiredif RFile, RFileSystem {
    requires java.io.RFileMap;

    state  
        RFile rfile;

    helper static RFile doOpen (java.io.File file) {
        RFile trfile;
        trfile = RFileMap.lookupAdd (file);

        if (file.exists ()) {
            RFileSystem.openOverwrite (trfile);
        } else {
            RFileSystem.openCreate (trfile);
        }

        return trfile;
    }

    wrapper FileOutputStream (java.io.File file) {
        RFile trfile;
        trfile = doOpen (file);
        #
        rfile = trfile;
    }

    wrapper FileOutputStream (String file) {
        File tmp;
        tmp = new File (file);
        RFile trfile;
        trfile = doOpen (tmp); 
        #;
        rfile = trfile;
    }

    // Need to be careful here becuase printstream uses it.
    wrapper FileOutputStream (java.io.FileDescriptor file) {
        RFile trfile;
        
        if (NCheck.isInitialized ()) {
            trfile = RFileMap.lookupAddReal (file);       
            if (trfile != null) {
                // Must exist since its a descriptor
                RFileSystem.openOverwrite (trfile);
            }
        } else {
            trfile = null;
        }

        #;
        rfile = trfile;
    }
    
    wrapper FileOutputStream (String file, boolean append) {
        if (append) {
            RFileSystem.openAppend (RFileMap.lookupAdd (file));
        } else {
            File tmp;
            tmp = new File (file);

            RFile trfile;
            trfile = RFileMap.lookupAdd (file);
            
            if (tmp.exists ()) {
                RFileSystem.openOverwrite (trfile);
            } else {
                RFileSystem.openCreate (trfile);
            }
        }

        #;
        rfile = RFileMap.lookup (file);
        NCheck.assert (rfile != null);
    }

    wrapper void write (int b) { 
        if (rfile != null) {
            RFileSystem.preWrite (rfile, 1);
        }
        #;
        if (rfile != null) {
            RFileSystem.postWrite (rfile, 1);
        }
    }

    wrapper void write (byte data[]) { 
        if (rfile != null) {
            RFileSystem.preWrite (rfile, data.length);
        }

        #;

        if (rfile != null) {
            RFileSystem.postWrite (rfile, data.length);
        }
    }

    wrapper void write (byte b[], int off, int len) {
        if (rfile != null) {
            RFileSystem.preWrite (rfile, len);
        }

        #;
      
        if (rfile != null) {
            RFileSystem.postWrite (rfile, len);
        }
    }

    wrapper void close () {
        if (rfile != null) {
            RFileSystem.close (rfile);
        }
        #;
    }

    wrapper java.io.FileDescriptor getFD () {
        #;
        RFileMap.addReference (result, rfile);
    }
}

About this file

Naccio Home Page
David Evans
University of Virginia, Computer Science