LIMA
Libre Multilingual Analyzer — C++ API
Loading...
Searching...
No Matches
FsaAccessIOStreamWrapper.cpp
Go to the documentation of this file.
1// Copyright 2002-2013 CEA LIST
2// SPDX-FileCopyrightText: 2022 CEA LIST <gael.de-chalendar@cea.fr>
3//
4// SPDX-License-Identifier: MIT
5
6/*****************************************************************************
7 * Copyright (C) 2006 by CEA *
8 * author Olivier MESNARD olivier.mesnard@cea.fr *
9 * *
10 * FsaAccessIOStreamBWrapper.cpp - description *
11 * Utilities for IO on file, stream, buffer of bytes or blob in SGBDR *
12 *****************************************************************************/
13
15#include <string.h>
16
17
18namespace Lima {
19namespace Common {
20namespace FsaAccess {
21
24
26 : m_is(is)
27// , m_pos(0), m_size(AbstractFsaAccessIStreamWrapper::BUFFER_SIZE)
28// , m_buffer( new char[AbstractFsaAccessIStreamWrapper::BUFFER_SIZE] )
29{
30// m_is.read( (char *)m_buffer, m_size );
31// m_size = m_is.gcount();
32}
33
35{
36// delete [] m_buffer;
37}
38
39void FsaAccessIStreamWrapper::readData( char *ptr, size_t n ) {
40// for( ; m_pos + n > m_size ; ) {
41// std::cerr << "FsaAccessOStreamWrapper::readData: memcpy (1) " << n << " bytes to pos " << m_pos << std::endl;
42// memcpy( (void *)ptr, m_buffer + m_pos, m_size - m_pos );
43// ptr += (m_size - m_pos);
44// n -= (m_size - m_pos);
45// m_is.read( (char *)m_buffer, m_size );
46// m_pos = 0;
47// m_size = m_is.gcount();
48// std::cerr << "FsaAccessOStreamWrapper::readData read " << m_size << " bytes from stream " << std::endl;
49// }
50// std::cerr << "FsaAccessOStreamWrapper::readData memcpy (2)" << n << " bytes to pos " << m_pos << std::endl;
51// memcpy( ptr, m_buffer + m_pos, n );
52// m_pos += n;
53 m_is.read( ptr, n );
54}
55
57 : m_os(os), m_pos(0), m_size(AbstractFsaAccessOStreamWrapper::BUFFER_SIZE),
58 m_buffer( new char[AbstractFsaAccessOStreamWrapper::BUFFER_SIZE] )
59{
60}
61
63{
64 m_os.write( m_buffer, m_pos );
65 delete [] m_buffer;
66}
67
68void FsaAccessOStreamWrapper::writeData(const char *ptr, size_t n ) {
69 for( ; m_pos + n > m_size ; ) {
70 memcpy( m_buffer + m_pos, (const char *)ptr, m_size - m_pos );
71 ptr += (m_size - m_pos);
72 n -= (m_size - m_pos);
73 m_os.write( m_buffer, m_size );
74 m_pos = 0;
75 }
76 memcpy( m_buffer + m_pos, ptr, n );
77 m_pos += n;
78}
79
85
90
91void FsaAccessInputHandlerWrapper::readData( char *ptr, size_t n ) {
92 for( ; m_pos + n > m_size ; ) {
93 memcpy( ptr, m_buffer + m_pos, m_size - m_pos );
94 m_ih.restoreData( m_buffer, m_size );
95 ptr += (m_size - m_pos);
96 n -= (m_size - m_pos);
97 m_pos = 0;
98 }
99 memcpy( ptr, m_buffer + m_pos, n );
100}
101
107
109{
110 m_oh.saveData( m_buffer, m_pos );
111 delete [] m_buffer;
112}
113
114void FsaAccessOutputHandlerWrapper::writeData(const char *ptr, size_t n ) {
115 for( ; m_pos + n > m_size ; ) {
116 memcpy( m_buffer + m_pos, ptr, m_size - m_pos );
117 m_oh.saveData( m_buffer, m_size );
118 ptr += (m_size - m_pos);
119 n -= (m_size - m_pos);
120 m_pos = 0;
121 }
122 memcpy( m_buffer + m_pos, ptr, n );
123 m_pos += n;
124}
125
126
127} // namespace FsaAccess
128} // namespace Common
129} // namespace Lima
#define BUFFER_SIZE
virtual void restoreData(char *m_buffer, uint64_t m_size)=0
virtual void saveData(const char *m_buffer, uint64_t m_size)=0
void writeData(const char *ptr, size_t n) override
NAUTITIA.