Changeset 495c0e2 in tol


Ignore:
Timestamp:
Feb 12, 2013, 2:53:29 PM (14 years ago)
Author:
Víctor de Buen <vdebuen@…>
Branches:
1941-docker-image-to-test, devel, master
Children:
ec868ac
Parents:
81f2698
Message:

Fixes #1646

git-svn-id: ​https://www.tol-project.org/svn/tolp/trunk@5595 be4846ae-f051-483a-831f-b64e7d08527f

File:
1 edited

Legend:

Unmodified
Added
Removed
  • tol/btol/bdb/filehandle.cpp

    r81f2698 r495c0e2  
    2929#include <tol/tol_btxtgra.h>
    3030#include <tol/tol_bdatgra.h>
     31#include <tol/tol_bmatgra.h>
    3132
    3233#include <errno.h>
    … …  
    236237}
    237238
    238 
    239239/////////////////////////////////////////////////////////////////////////////
    240240  DeclareContensClass(BTxt, BTxtTemporary, BTxtFGetText);
    … …  
    283283  {
    284284    contens_ = fputs(txt.String(),file);
     285  }
     286}
     287
     288/////////////////////////////////////////////////////////////////////////////
     289  DeclareContensClass(BDat, BDatTemporary, BDatFTell);
     290  DefExtOpr(1, BDatFTell, "FTell", 1, 1, "Real",
     291  "(Real handle)",
     292  I2("Returns the current position of a file open with FOpen.",
     293     "Devuelve la posición actual de un fichero abierto con FOpen"),
     294  BOperClassify::BayesDataBase_);
     295  void BDatFTell::CalcContens()
     296/////////////////////////////////////////////////////////////////////////////
     297{
     298  int handle  = (int)Real(Arg(1));
     299  FILE* file = BFileDesc::CheckFileHandle(handle,true,
     300    I2("Fail in ","Fallo en ")+"FTell");
     301  if(file)
     302  {
     303    contens_ = (double)ftello(file);
     304  }
     305}
     306
     307/////////////////////////////////////////////////////////////////////////////
     308  DeclareContensClass(BDat, BDatTemporary, BDatFSeek);
     309  DefExtOpr(1, BDatFSeek, "FSeek", 2, 2, "Real Real",
     310  "(Real handle, Real offset)",
     311  I2("Sets the current position of a file open with FOpen.",
     312     "Mueve la posición actual de un fichero abierto con FOpen"),
     313  BOperClassify::BayesDataBase_);
     314  void BDatFSeek::CalcContens()
     315/////////////////////////////////////////////////////////////////////////////
     316{
     317  int handle  = (int)Real(Arg(1));
     318  off_t offset = (off_t)Real(Arg(2));
     319  FILE* file = BFileDesc::CheckFileHandle(handle,true,
     320    I2("Fail in ","Fallo en ")+"FSeek");
     321  if(file)
     322  {
     323    contens_ = fseeko(file,offset,SEEK_SET);
     324  }
     325}
     326
     327/////////////////////////////////////////////////////////////////////////////
     328  DeclareContensClass(BMat, BMatTemporary, BMatFGetNumbers);
     329  DefExtOpr(1, BMatFGetNumbers, "FGetNumbers", 3, 3, "Real Real Text",
     330  "(Real handle, Real numItems, Text numberType)",
     331  I2("Reads an array of numbers from a binary file.",
     332     "Lee un array de números desde un fichero binario."),
     333  BOperClassify::BayesDataBase_);
     334  void BMatFGetNumbers::CalcContens()
     335/////////////////////////////////////////////////////////////////////////////
     336{
     337  if(CheckNonDeclarativeAction("FGetNumbers")) { return; }
     338  int handle  = (int)Real(Arg(1));
     339  int numItems = (int)Real(Arg(2));
     340  BText& numberType = Text(Arg(3));
     341  contens_.Alloc(1,numItems);
     342  int result, i;
     343  FILE* file = BFileDesc::CheckFileHandle(handle,true,
     344    I2("Fail in ","Fallo en ")+"FGetNumbers");
     345  if(file)
     346  {
     347    if(numberType=="double")
     348    {
     349      BArray<double> arr(numItems);
     350      result = fread(arr.GetBuffer(),8,numItems,file);
     351      if(result==numItems) for(i=0; i<numItems; i++)
     352      {
     353        contens_(0,i) = (double)arr(i);
     354      }
     355    }
     356    else if(numberType=="float")
     357    {
     358      BArray<float> arr(numItems);
     359      result = fread(arr.GetBuffer(),4,numItems,file);
     360      if(result==numItems) for(i=0; i<numItems; i++)
     361      {
     362        contens_(0,i) = (double)arr(i);
     363      }
     364    }
     365    else if(numberType=="int")
     366    {
     367      BArray<int> arr(numItems);
     368      result = fread(arr.GetBuffer(),4,numItems,file);
     369      if(result==numItems) for(i=0; i<numItems; i++)
     370      {
     371        contens_(0,i) = (double)arr(i);
     372      }
     373    }
     374    else if(numberType=="unsigned int")
     375    {
     376      BArray<unsigned int> arr(numItems);
     377      result = fread(arr.GetBuffer(),4,numItems,file);
     378      if(result==numItems) for(i=0; i<numItems; i++)
     379      {
     380        contens_(0,i) = (double)arr(i);
     381      }
     382    }
     383    else if(numberType=="short int")
     384    {
     385      BArray<short int> arr(numItems);
     386      result = fread(arr.GetBuffer(),2,numItems,file);
     387      if(result==numItems) for(i=0; i<numItems; i++)
     388      {
     389        contens_(0,i) = (double)arr(i);
     390      }
     391    }
     392    else if(numberType=="unsigned short int")
     393    {
     394      BArray<unsigned short int> arr(numItems);
     395      result = fread(arr.GetBuffer(),2,numItems,file);
     396      if(result==numItems) for(i=0; i<numItems; i++)
     397      {
     398        contens_(0,i) = (double)arr(i);
     399      }
     400    }
     401    if(result!=numItems)
     402    {
     403      Error(BText("[FGetNumbers] ")+
     404        I2("The total number of elements successfully read is ",
     405           "El número total de elementos leídos con éxito es ")+result+
     406        I2(" when it was expected ",
     407           " cuando se esperaban ")+numItems);
     408    };
    285409  }
    286410}
Note: See TracChangeset for help on using the changeset viewer.