Archeus 0.0.0
A C library and game engine that focuses on documentation
Loading...
Searching...
No Matches
buffer.c File Reference
#include "arc/console/buffer.h"
#include "arc/console/view.h"
#include "arc/std/string.h"
#include "arc/std/vector.h"
#include <stdlib.h>

Go to the source code of this file.

Data Structures

struct  ARC_ConsoleBuffer
 

Functions

void ARC_ConsoleBuffer_Create (ARC_ConsoleBuffer **buffer)
 creates ARC_ConsoleBuffer type
 
void ARC_ConsoleBuffer_Destroy (ARC_ConsoleBuffer *buffer)
 destroys ARC_ConsoleBuffer type
 
void ARC_ConsoleBuffer_Clear (ARC_ConsoleBuffer *buffer)
 clears the contents of a ARC_ConsoleBuffer
 
void ARC_ConsoleBuffer_Render (ARC_ConsoleBuffer *buffer, ARC_ConsoleView *view)
 renders a buffer to a ARC_ConsoleView
 
void ARC_ConsoleBuffer_RenderSection (ARC_ConsoleBuffer *buffer, ARC_ConsoleView *view, uint32_t startIndex, uint32_t lines)
 renders a section of buffer to a ARC_ConsoleView
 
void ARC_ConsoleBuffer_AddChar (ARC_ConsoleBuffer *buffer, char character)
 adds a character to the buffer
 
void ARC_ConsoleBuffer_AddString (ARC_ConsoleBuffer *buffer, ARC_String *string)
 adds an ARC_String to the buffer
 
void ARC_ConsoleBuffer_AddCString (ARC_ConsoleBuffer *buffer, char *cstring, uint64_t length)
 adds a cstring to the buffer
 
void ARC_ConsoleBuffer_AddCStringWithStrlen (ARC_ConsoleBuffer *buffer, char *cstring)
 adds a cstring to the buffer with the cstrings string length
 
uint32_t ARC_ConsoleBuffer_GetLineNumbers (ARC_ConsoleBuffer *buffer)
 gets the number of lines from a console line buffer
 

Function Documentation

◆ ARC_ConsoleBuffer_AddChar()

void ARC_ConsoleBuffer_AddChar ( ARC_ConsoleBuffer * buffer,
char character )

adds a character to the buffer

Parameters
bufferARC_ConsoleBuffer to add character to
characterchar to add to ARC_ConsoleBuffer

Definition at line 94 of file buffer.c.

94 {
95 if(character == '\n'){
96 ARC_Vector_Add(buffer->bufferLines, (void *)NULL);
97 return;
98 }
99
100 //get the last line and add a char to it
101 ARC_String *bufferLine = (ARC_String *)ARC_Vector_Get(buffer->bufferLines, ARC_Vector_Size(buffer->bufferLines) - 1);
102 ARC_Vector_RemoveIndex(buffer->bufferLines, ARC_Vector_Size(buffer->bufferLines) - 1);
103
104 if(bufferLine == NULL){
105 ARC_String_Create(&bufferLine, &character, 1);
106 ARC_Vector_Add(buffer->bufferLines, (void *)bufferLine);
107 return;
108 }
109
110 //add char to the end of the bufferline
111 ARC_String *nextChar;
112 ARC_String_Create(&nextChar, &character, 1);
113
114 ARC_String *tempBufferLine = bufferLine;
115 ARC_String_Merge(&bufferLine, tempBufferLine, nextChar);
116
117 ARC_String_Destroy(tempBufferLine);
118 ARC_String_Destroy(nextChar);
119
120 //add buffer line back to the bufferLines
121 ARC_Vector_Add(buffer->bufferLines, (void *)bufferLine);
122}
void ARC_String_Merge(ARC_String **combined, ARC_String *first, ARC_String *second)
merges two strings together
Definition string.c:485
void ARC_String_Create(ARC_String **string, char *data, uint64_t length)
creates ARC_String type
Definition string.c:9
void ARC_String_Destroy(ARC_String *string)
destroys ARC_String type
Definition string.c:52
ARC_Vector * bufferLines
Definition buffer.c:10
substring position within a string
Definition string.h:14
void * ARC_Vector_Get(ARC_Vector *vector, uint32_t index)
gets an item from an ARC_Vector at a position index
Definition vector.c:153
void ARC_Vector_Add(ARC_Vector *vector, void *data)
adds an item to an ARC_Vector
Definition vector.c:70
void ARC_Vector_RemoveIndex(ARC_Vector *vector, uint32_t index)
removes an item from an ARC_Vector at an index
Definition vector.c:110

References ARC_String_Create(), ARC_String_Destroy(), ARC_String_Merge(), ARC_Vector_Add(), ARC_Vector_Get(), ARC_Vector_RemoveIndex(), and ARC_ConsoleBuffer::bufferLines.

Referenced by ARC_ConsoleBuffer_AddCString(), ARC_ConsoleBuffer_AddCStringWithStrlen(), and ARC_ConsoleBuffer_AddString().

◆ ARC_ConsoleBuffer_AddCString()

void ARC_ConsoleBuffer_AddCString ( ARC_ConsoleBuffer * buffer,
char * cstring,
uint64_t length )

adds a cstring to the buffer

Parameters
bufferARC_ConsoleBuffer to add character to
stringcstring to add to ARC_ConsoleBuffer
lengththe length of the c string to add

Definition at line 131 of file buffer.c.

131 {
132 //TODO: this in a more efficient way
133 for(uint64_t i = 0; i < length; i++){
134 ARC_ConsoleBuffer_AddChar(buffer, cstring[i]);
135 }
136}
void ARC_ConsoleBuffer_AddChar(ARC_ConsoleBuffer *buffer, char character)
adds a character to the buffer
Definition buffer.c:94

References ARC_ConsoleBuffer_AddChar().

◆ ARC_ConsoleBuffer_AddCStringWithStrlen()

void ARC_ConsoleBuffer_AddCStringWithStrlen ( ARC_ConsoleBuffer * buffer,
char * cstring )

adds a cstring to the buffer with the cstrings string length

Parameters
bufferARC_ConsoleBuffer to add character to
stringcstring to add to ARC_ConsoleBuffer

Definition at line 138 of file buffer.c.

138 {
139 //TODO: this in a more efficient way
140 for(uint64_t i = 0; i < strlen(cstring); i++){
141 ARC_ConsoleBuffer_AddChar(buffer, cstring[i]);
142 }
143}

References ARC_ConsoleBuffer_AddChar().

◆ ARC_ConsoleBuffer_AddString()

void ARC_ConsoleBuffer_AddString ( ARC_ConsoleBuffer * buffer,
ARC_String * string )

adds an ARC_String to the buffer

Parameters
bufferARC_ConsoleBuffer to add character to
stringARC_String to add to ARC_ConsoleBuffer

Definition at line 124 of file buffer.c.

124 {
125 //TODO: this in a more efficient way
126 for(uint64_t i = 0; i < string->length; i++){
127 ARC_ConsoleBuffer_AddChar(buffer, string->data[i]);
128 }
129}
char * data
Definition string.h:15

References ARC_ConsoleBuffer_AddChar(), and ARC_String::data.

◆ ARC_ConsoleBuffer_Clear()

void ARC_ConsoleBuffer_Clear ( ARC_ConsoleBuffer * buffer)

clears the contents of a ARC_ConsoleBuffer

Parameters
bufferARC_ConsoleBuffer to clear

Definition at line 35 of file buffer.c.

35 {
36 for(uint32_t i = 0; i < ARC_Vector_Size(buffer->bufferLines); i++){
37 ARC_String *bufferLine = (ARC_String *)ARC_Vector_Get(buffer->bufferLines, i);
38
39 if(bufferLine != NULL){
40 ARC_String_Destroy(bufferLine);
41 }
42 }
43
46
47 //add first line to vector
48 ARC_Vector_Add(buffer->bufferLines, NULL);
49}
void ARC_Vector_Destroy(ARC_Vector *vector)
destroys an ARC_Vector
Definition vector.c:54
void ARC_Vector_Create(ARC_Vector **vector, ARC_Vector_CompareDataFn *compareDataFn, ARC_Vector_DestroyDataFn *destroyDataFn)
creates an ARC_Vector which is an "expandable" array
Definition vector.c:31

References ARC_String_Destroy(), ARC_Vector_Add(), ARC_Vector_Create(), ARC_Vector_Destroy(), ARC_Vector_Get(), and ARC_ConsoleBuffer::bufferLines.

◆ ARC_ConsoleBuffer_Create()

void ARC_ConsoleBuffer_Create ( ARC_ConsoleBuffer ** buffer)

creates ARC_ConsoleBuffer type

Parameters
bufferARC_ConsoleBuffer to create

Definition at line 13 of file buffer.c.

13 {
14 *buffer = (ARC_ConsoleBuffer *)malloc(sizeof(ARC_ConsoleBuffer));
15
16 ARC_Vector_Create(&((*buffer)->bufferLines));
17
18 //add first line to vector
19 ARC_Vector_Add((*buffer)->bufferLines, NULL);
20}

References ARC_Vector_Add(), and ARC_Vector_Create().

Referenced by ARC_ConsoleShell_Create().

◆ ARC_ConsoleBuffer_Destroy()

void ARC_ConsoleBuffer_Destroy ( ARC_ConsoleBuffer * buffer)

destroys ARC_ConsoleBuffer type

Parameters
bufferARC_ConsoleBuffer to destroy

Definition at line 22 of file buffer.c.

22 {
23 for(uint32_t i = 0; i < ARC_Vector_Size(buffer->bufferLines); i++){
24 ARC_String *bufferLine = (ARC_String *)ARC_Vector_Get(buffer->bufferLines, i);
25
26 if(bufferLine != NULL){
27 ARC_String_Destroy(bufferLine);
28 }
29 }
30
32 free(buffer);
33}

References ARC_String_Destroy(), ARC_Vector_Destroy(), ARC_Vector_Get(), and ARC_ConsoleBuffer::bufferLines.

Referenced by ARC_ConsoleShell_Destroy().

◆ ARC_ConsoleBuffer_GetLineNumbers()

uint32_t ARC_ConsoleBuffer_GetLineNumbers ( ARC_ConsoleBuffer * buffer)

gets the number of lines from a console line buffer

Parameters
bufferARC_ConsoleBuffer get number of lines from
Returns
the number of lines within an ARC_ConsoleBuffer

Definition at line 145 of file buffer.c.

145 {
146 return ARC_Vector_Size(buffer->bufferLines);
147}

References ARC_ConsoleBuffer::bufferLines.

◆ ARC_ConsoleBuffer_Render()

void ARC_ConsoleBuffer_Render ( ARC_ConsoleBuffer * buffer,
ARC_ConsoleView * view )

renders a buffer to a ARC_ConsoleView

Parameters
bufferARC_ConsoleBuffer to render
viewARC_ConsoleView to render the buffer contents to

Definition at line 51 of file buffer.c.

51 {
52 ARC_Rect viewBounds = ARC_ConsoleView_GetBounds(view);
53
54 uint32_t bufferStartIndex = 0;
55 if(ARC_Vector_Size(buffer->bufferLines) > (uint32_t)viewBounds.h){
56 bufferStartIndex = ARC_Vector_Size(buffer->bufferLines) - viewBounds.h;
57 }
58
59 for(uint32_t i = 0; i < (uint32_t)viewBounds.h; i++){
60 if(i + bufferStartIndex > ARC_Vector_Size(buffer->bufferLines)){
61 break;
62 }
63
64 ARC_String *bufferLine = (ARC_String *)ARC_Vector_Get(buffer->bufferLines, i + bufferStartIndex);
65 if(bufferLine == NULL){
66 continue;
67 }
68
69 ARC_ConsoleView_RenderStringAt(view, bufferLine, (ARC_Point){ 0, i });
70 }
71}
void ARC_ConsoleView_RenderStringAt(ARC_ConsoleView *view, ARC_String *text, ARC_Point pos)
Definition view.c:109
ARC_Rect ARC_ConsoleView_GetBounds(ARC_ConsoleView *view)
gets the bounds of an ARC_ConsoleView
Definition view.c:147
int32_t h
Definition rectangle.h:16

References ARC_ConsoleView_GetBounds(), ARC_ConsoleView_RenderStringAt(), ARC_Vector_Get(), ARC_ConsoleBuffer::bufferLines, and ARC_Rect::h.

Referenced by ARC_ConsoleShell_Render().

◆ ARC_ConsoleBuffer_RenderSection()

void ARC_ConsoleBuffer_RenderSection ( ARC_ConsoleBuffer * buffer,
ARC_ConsoleView * view,
uint32_t startIndex,
uint32_t lines )

renders a section of buffer to a ARC_ConsoleView

Parameters
bufferARC_ConsoleBuffer to render
viewARC_ConsoleView to render the buffer contents to
startIndexstart index of buffer to render
linesthe number of lines of buffer to render

Definition at line 73 of file buffer.c.

73 {
74 ARC_Rect viewBounds = ARC_ConsoleView_GetBounds(view);
75
76 for(uint32_t i = 0; i < lines; i++){
77 if(i + startIndex >= ARC_Vector_Size(buffer->bufferLines)){
78 break;
79 }
80
81 if(i >= (uint32_t)viewBounds.h){
82 break;
83 }
84
85 ARC_String *bufferLine = (ARC_String *)ARC_Vector_Get(buffer->bufferLines, i + startIndex);
86 if(bufferLine == NULL){
87 continue;
88 }
89
90 ARC_ConsoleView_RenderStringAt(view, bufferLine, (ARC_Point){ 0, i });
91 }
92}

References ARC_ConsoleView_GetBounds(), ARC_ConsoleView_RenderStringAt(), ARC_Vector_Get(), ARC_ConsoleBuffer::bufferLines, and ARC_Rect::h.