Skip to content

IO

Module for handling the IO used by the compiler.

ArxBuffer

ArxBuffer gathers function for handle the system buffer.

Source code in src/arx/io.py
 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
class ArxBuffer:
    """ArxBuffer gathers function for handle the system buffer."""

    buffer: str = ""
    position: int = 0

    def __init__(self) -> None:
        """Initialize ArxBuffer instance."""
        self.clean()

    def clean(self) -> None:
        """Clean the buffer content."""
        self.position = 0
        self.buffer = ""

    def write(self, text: str) -> None:
        """Write the given text to the buffer."""
        self.buffer += text
        self.position = 0

    def read(self) -> str:
        """Read the buffer content."""
        try:
            i = self.position
            self.position += 1
            return self.buffer[i]
        except IndexError:
            return ""

__init__()

Initialize ArxBuffer instance.

Source code in src/arx/io.py
14
15
16
def __init__(self) -> None:
    """Initialize ArxBuffer instance."""
    self.clean()

clean()

Clean the buffer content.

Source code in src/arx/io.py
18
19
20
21
def clean(self) -> None:
    """Clean the buffer content."""
    self.position = 0
    self.buffer = ""

read()

Read the buffer content.

Source code in src/arx/io.py
28
29
30
31
32
33
34
35
def read(self) -> str:
    """Read the buffer content."""
    try:
        i = self.position
        self.position += 1
        return self.buffer[i]
    except IndexError:
        return ""

write(text)

Write the given text to the buffer.

Source code in src/arx/io.py
23
24
25
26
def write(self, text: str) -> None:
    """Write the given text to the buffer."""
    self.buffer += text
    self.position = 0

ArxFile

ArxFile gathers function to handle files.

Source code in src/arx/io.py
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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
class ArxFile:
    """ArxFile gathers function to handle files."""

    @staticmethod
    def create_tmp_file(content: str) -> str:
        """
        Create a temporary file with the given content.

        Parameters
        ----------
        content : str
            The content of the temporary file.

        Returns
        -------
        str
            The name of the created temporary file.
        """
        # Create a temporary file.
        with tempfile.NamedTemporaryFile(delete=False) as tmpfile:
            tmpfile.write(content.encode())

        # Rename the temporary file with the .cpp extension.
        filename = tmpfile.name
        filename_ext = filename + ".cpp"
        os.rename(filename, filename_ext)

        return filename_ext

    @staticmethod
    def delete_file(filename: str) -> int:
        """
        Delete the specified file.

        Parameters
        ----------
        filename : str
            The name of the file to be deleted.

        Returns
        -------
        int
            Returns 0 on success, or -1 on failure.
        """
        try:
            os.remove(filename)
            return 0
        except OSError:
            return -1

create_tmp_file(content) staticmethod

Create a temporary file with the given content.

Parameters

content : str The content of the temporary file.

Returns

str The name of the created temporary file.

Source code in src/arx/io.py
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
@staticmethod
def create_tmp_file(content: str) -> str:
    """
    Create a temporary file with the given content.

    Parameters
    ----------
    content : str
        The content of the temporary file.

    Returns
    -------
    str
        The name of the created temporary file.
    """
    # Create a temporary file.
    with tempfile.NamedTemporaryFile(delete=False) as tmpfile:
        tmpfile.write(content.encode())

    # Rename the temporary file with the .cpp extension.
    filename = tmpfile.name
    filename_ext = filename + ".cpp"
    os.rename(filename, filename_ext)

    return filename_ext

delete_file(filename) staticmethod

Delete the specified file.

Parameters

filename : str The name of the file to be deleted.

Returns

int Returns 0 on success, or -1 on failure.

Source code in src/arx/io.py
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
@staticmethod
def delete_file(filename: str) -> int:
    """
    Delete the specified file.

    Parameters
    ----------
    filename : str
        The name of the file to be deleted.

    Returns
    -------
    int
        Returns 0 on success, or -1 on failure.
    """
    try:
        os.remove(filename)
        return 0
    except OSError:
        return -1

ArxIO

Arx class for Input and Output operations.

Source code in src/arx/io.py
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
class ArxIO:
    """Arx class for Input and Output operations."""

    INPUT_FROM_STDIN: bool = False
    INPUT_FILE: str = ""
    EOF: int = sys.maxunicode + 1
    buffer: ArxBuffer = ArxBuffer()

    @classmethod
    def get_char(cls) -> str:
        """
        Get a char from the buffer or from the default input.

        Returns
        -------
        str
            A char from the buffer.
        """
        if cls.INPUT_FROM_STDIN:
            return sys.stdin.read(1)
        return cls.buffer.read()

    @classmethod
    def file_to_buffer(cls, filename: str) -> None:
        """
        Copy the file content to the buffer.

        Parameters
        ----------
        filename : str
            The name of the file to be copied to the buffer.
        """
        with open(filename, "r") as arxfile:
            cls.buffer.clean()
            for line in arxfile:
                cls.buffer.write(line + "\n")

    @classmethod
    def string_to_buffer(cls, value: str) -> None:
        """
        Copy the given string to the buffer.

        Parameters
        ----------
        value : str
            The string to be copied to the buffer.
        """
        cls.buffer.clean()
        cls.buffer.write(value)

    @classmethod
    def load_input_to_buffer(cls) -> None:
        """Load the content file or the standard input to the buffer."""
        if cls.INPUT_FILE:
            input_file_path = os.path.abspath(cls.INPUT_FILE)
            cls.file_to_buffer(input_file_path)
            return

        file_content = sys.stdin.read().strip()
        if file_content:
            cls.string_to_buffer(file_content)

file_to_buffer(filename) classmethod

Copy the file content to the buffer.

Parameters

filename : str The name of the file to be copied to the buffer.

Source code in src/arx/io.py
60
61
62
63
64
65
66
67
68
69
70
71
72
73
@classmethod
def file_to_buffer(cls, filename: str) -> None:
    """
    Copy the file content to the buffer.

    Parameters
    ----------
    filename : str
        The name of the file to be copied to the buffer.
    """
    with open(filename, "r") as arxfile:
        cls.buffer.clean()
        for line in arxfile:
            cls.buffer.write(line + "\n")

get_char() classmethod

Get a char from the buffer or from the default input.

Returns

str A char from the buffer.

Source code in src/arx/io.py
46
47
48
49
50
51
52
53
54
55
56
57
58
@classmethod
def get_char(cls) -> str:
    """
    Get a char from the buffer or from the default input.

    Returns
    -------
    str
        A char from the buffer.
    """
    if cls.INPUT_FROM_STDIN:
        return sys.stdin.read(1)
    return cls.buffer.read()

load_input_to_buffer() classmethod

Load the content file or the standard input to the buffer.

Source code in src/arx/io.py
88
89
90
91
92
93
94
95
96
97
98
@classmethod
def load_input_to_buffer(cls) -> None:
    """Load the content file or the standard input to the buffer."""
    if cls.INPUT_FILE:
        input_file_path = os.path.abspath(cls.INPUT_FILE)
        cls.file_to_buffer(input_file_path)
        return

    file_content = sys.stdin.read().strip()
    if file_content:
        cls.string_to_buffer(file_content)

string_to_buffer(value) classmethod

Copy the given string to the buffer.

Parameters

value : str The string to be copied to the buffer.

Source code in src/arx/io.py
75
76
77
78
79
80
81
82
83
84
85
86
@classmethod
def string_to_buffer(cls, value: str) -> None:
    """
    Copy the given string to the buffer.

    Parameters
    ----------
    value : str
        The string to be copied to the buffer.
    """
    cls.buffer.clean()
    cls.buffer.write(value)