File: output.h

package info (click to toggle)
indigo 1.4.3-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 48,936 kB
  • sloc: ansic: 332,816; cpp: 169,470; python: 20,033; java: 13,701; cs: 9,979; asm: 8,475; sql: 6,743; xml: 6,354; javascript: 1,245; sh: 555; php: 506; makefile: 54
file content (130 lines) | stat: -rw-r--r-- 3,690 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
/****************************************************************************
 * Copyright (C) from 2009 to Present EPAM Systems.
 *
 * This file is part of Indigo toolkit.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 ***************************************************************************/

#ifndef __output_h__
#define __output_h__

#include <cstdio>

#include "base_cpp/array.h"
#include "base_cpp/io_base.h"

namespace indigo
{

    class DLLEXPORT Output
    {
    public:
        DECL_ERROR;

        explicit Output();
        virtual ~Output();

        virtual void write(const void* data, int size) = 0;
        virtual void seek(long long offset, int from) = 0;
        virtual long long tell() = 0;
        virtual void flush() = 0;

        virtual void writeByte(byte value);

        void writeChar(char value);
        void writeBinaryInt(int value);
        void writeBinaryDword(dword value);
        void writeBinaryWord(word value);
        void writeBinaryFloat(float value);
        void writePackedShort(short value);
        void writePackedUInt(unsigned int value);
        void writeString(const char* string);
        void writeStringCR(const char* string);
        void writeCR();
        void writeArray(const Array<char>& data);

        void skip(int count);

        void printf(const char* format, ...);
        void vprintf(const char* format, va_list args);
        void printfCR(const char* format, ...);
    };

    class DLLEXPORT FileOutput : public Output
    {
    public:
        FileOutput(Encoding filename_encoding, const char* filename);
        explicit FileOutput(const char* name);
        // explicit FileOutput (const char *format, ...);
        explicit FileOutput(bool append, const char* format, ...);
        virtual ~FileOutput();

        virtual void write(const void* data, int size);
        virtual void seek(long long offset, int from);
        virtual long long tell();
        virtual void flush();

    protected:
        FILE* _file;
    };

    class DLLEXPORT ArrayOutput : public Output
    {
    public:
        explicit ArrayOutput(Array<char>& arr);
        virtual ~ArrayOutput();

        virtual void write(const void* data, int size);
        virtual void seek(long long offset, int from);
        virtual long long tell();
        virtual void flush();

        void clear();

    protected:
        Array<char>& _arr;
    };

    class DLLEXPORT StandardOutput : public Output
    {
    public:
        explicit StandardOutput();
        virtual ~StandardOutput();

        virtual void write(const void* data, int size);
        virtual void seek(long long offset, int from);
        virtual long long tell();
        virtual void flush();

    protected:
        int _count;
    };

    class DLLEXPORT NullOutput : public Output
    {
    public:
        explicit NullOutput();
        virtual ~NullOutput();

        virtual void write(const void* data, int size);
        virtual void seek(long long offset, int from);
        virtual long long tell();
        virtual void flush();
    };

    DLLEXPORT void bprintf(Array<char>& buf, const char* format, ...);

} // namespace indigo

#endif