Archeus 0.0.0
A C library and game engine that focuses on documentation
Loading...
Searching...
No Matches
buffer.c
Go to the documentation of this file.
2
3#include "arc/console/view.h"
4#include "arc/std/string.h"
5#include "arc/std/vector.h"
6#include <stdlib.h>
7#include <string.h>
8
12
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}
21
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}
34
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}
50
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}
72
73void ARC_ConsoleBuffer_RenderSection(ARC_ConsoleBuffer *buffer, ARC_ConsoleView *view, uint32_t startIndex, uint32_t lines){
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}
93
94void ARC_ConsoleBuffer_AddChar(ARC_ConsoleBuffer *buffer, char character){
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}
123
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}
130
131void ARC_ConsoleBuffer_AddCString(ARC_ConsoleBuffer *buffer, char *cstring, uint64_t length){
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}
137
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}
144
146 return ARC_Vector_Size(buffer->bufferLines);
147}
void ARC_ConsoleBuffer_AddChar(ARC_ConsoleBuffer *buffer, char character)
adds a character to the buffer
Definition buffer.c:94
void ARC_ConsoleBuffer_Render(ARC_ConsoleBuffer *buffer, ARC_ConsoleView *view)
renders a buffer to a ARC_ConsoleView
Definition buffer.c:51
uint32_t ARC_ConsoleBuffer_GetLineNumbers(ARC_ConsoleBuffer *buffer)
gets the number of lines from a console line buffer
Definition buffer.c:145
void ARC_ConsoleBuffer_AddCStringWithStrlen(ARC_ConsoleBuffer *buffer, char *cstring)
adds a cstring to the buffer with the cstrings string length
Definition buffer.c:138
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
Definition buffer.c:73
void ARC_ConsoleBuffer_Create(ARC_ConsoleBuffer **buffer)
creates ARC_ConsoleBuffer type
Definition buffer.c:13
void ARC_ConsoleBuffer_AddCString(ARC_ConsoleBuffer *buffer, char *cstring, uint64_t length)
adds a cstring to the buffer
Definition buffer.c:131
void ARC_ConsoleBuffer_AddString(ARC_ConsoleBuffer *buffer, ARC_String *string)
adds an ARC_String to the buffer
Definition buffer.c:124
void ARC_ConsoleBuffer_Destroy(ARC_ConsoleBuffer *buffer)
destroys ARC_ConsoleBuffer type
Definition buffer.c:22
void ARC_ConsoleBuffer_Clear(ARC_ConsoleBuffer *buffer)
clears the contents of a ARC_ConsoleBuffer
Definition buffer.c:35
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
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
int32_t h
Definition rectangle.h:16
substring position within a string
Definition string.h:14
char * data
Definition string.h:15
a private dynamic array type
Definition vector.c:12
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_Destroy(ARC_Vector *vector)
destroys an ARC_Vector
Definition vector.c:54
void ARC_Vector_RemoveIndex(ARC_Vector *vector, uint32_t index)
removes an item from an ARC_Vector at an index
Definition vector.c:110
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