Changeset 19810


Ignore:
Timestamp:
11/25/15 13:47:15 (9 years ago)
Author:
Eric.Larour
Message:

CHG: i/o is now bidirection, can write and read a binary memory buffer.

Location:
issm/trunk-jpl/src/m
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/m/io/fileptr.js

    r19793 r19810  
    1212        this.view =NaN;
    1313        this.ptr =NaN;
     14        this.buffersize =NaN;
     15        this.mode ='';
    1416        this.options = new pairoptions(Array.prototype.slice.call(arguments));
    1517       
     
    2123                        console.log(sprintf("       ptr: %i\n",this.ptr));
    2224                        console.log(sprintf("       increment: %i\n",this.increment));
     25                        console.log(sprintf("       mode: %s\n",this.mode));
    2326
    2427                } //}}}
    2528                this.setdefaultparameters = function (options) { //{{{
    26 
    27                         this.increment=options.getfieldvalue('increment',80000); //80000 bytes,  10000 doubles.
    28                         this.buffer=new ArrayBuffer(this.increment);
     29       
     30                        this.mode=options.getfieldvalue('mode');
    2931                        this.ptr=0;
    30                         this.view=new DataView(this.buffer);
     32                        this.increment=0;
     33                        this.buffersize=0;
     34                        if (this.mode=='w'){
     35                                this.increment=options.getfieldvalue('increment',80000); //80000 bytes,  10000 doubles.
     36                                this.buffer=new ArrayBuffer(this.increment);
     37                                this.view=new DataView(this.buffer);
     38                        }
     39                        else if(this.mode == 'r'){
     40                               
     41                                /*recover buffer and its size: */
     42                                var bufferin= options.getfieldvalue('buffer');
     43                                this.buffersize= options.getfieldvalue('buffersize');
     44                               
     45                                /*crete a typed array buffer: */
     46                                this.buffer=new ArrayBuffer(this.buffersize);
     47                                this.view=new DataView(this.buffer);
     48                                for(var i=0;i<this.buffersize;i++) this.view.setUint8(i,bufferin[i]);
     49                        }
    3150
    3251                } //}}}
     
    7291                        else throw Error('fileptr.fwrite error message: wrong type of format');
    7392                } //}}}
     93                this.fread = function (size,format) { //{{{
     94                       
     95                        var value;
     96
     97                        if(this.ptr==this.buffersize)return -1;
     98                        if(format == 'int'){
     99                                if(size==1){
     100                                        value=this.view.getUint32(this.ptr,true);
     101                                        this.ptr+=4;
     102                                }
     103                                else{
     104                                        value = new Uint32Array(size);
     105                                        for(var i=0;i<size;i++){
     106                                                value[i]=this.view.getUint32(this.ptr,true);
     107                                                this.ptr+=4;
     108                                        }
     109                                }
     110                        }
     111                        else if(format == 'char'){
     112                                value = '';
     113                                for(var i=0;i<(size-1);i++){
     114                                        value+= String.fromCharCode(this.view.getUint8(this.ptr,true));
     115                                        this.ptr+=1;
     116                                }
     117                                this.ptr+=1; //pass over the '\0';
     118
     119                        }
     120                        else if(format == 'double'){
     121                                if(size==1){
     122                                        value=this.view.getFloat64(this.ptr,true);
     123                                        this.ptr+=8;
     124                                }
     125                                else{
     126                                        value = new Float64Array(size);
     127                                        for(var i=0;i<size;i++){
     128                                                value[i]=this.view.getFloat64(this.ptr,true);
     129                                                this.ptr+=8;
     130                                        }
     131                                }
     132                        }
     133                        else throw Error('fileptr.fwrite error message: wrong type of format');
     134                       
     135                        return value;
     136                } //}}}
    74137                this.rawbuffer = function () { //{{{
    75138                        return this.buffer.slice(0,this.ptr);
  • issm/trunk-jpl/src/m/solve/marshall.js

    r19791 r19810  
    1313
    1414        //open file for binary writing
    15         fid=new fileptr();
     15        fid=new fileptr('mode','w');
    1616
    1717        //First, write MaximumNumberOfEnum to make sure that the Enums are synchronized
Note: See TracChangeset for help on using the changeset viewer.