Fix .gitignore and b_create()
This commit is contained in:
parent
9f21bf4b5c
commit
2c8fc9fd7f
|
@ -27,8 +27,4 @@ bld/
|
||||||
|
|
||||||
## Ignore Visual Studio Code temporary files and project settings
|
## Ignore Visual Studio Code temporary files and project settings
|
||||||
|
|
||||||
.vscode/*
|
.vscode/*
|
||||||
!.vscode/settings.json
|
|
||||||
!.vscode/tasks.json
|
|
||||||
!.vscode/launch.json
|
|
||||||
!.vscode/extensions.json
|
|
44
buffer.c
44
buffer.c
|
@ -3,7 +3,7 @@
|
||||||
* Compiler: GCC 6.2.0
|
* Compiler: GCC 6.2.0
|
||||||
* Author: Victor Fernandes, 040772243
|
* Author: Victor Fernandes, 040772243
|
||||||
* Course: CST8152 - Compilers, Lab Section: 011
|
* Course: CST8152 - Compilers, Lab Section: 011
|
||||||
* Date: September 12, 2016
|
* Date: February 1, 2017
|
||||||
* Professor: Svillen Ravev
|
* Professor: Svillen Ravev
|
||||||
* A character buffer utility with three modes of self-incrementation
|
* A character buffer utility with three modes of self-incrementation
|
||||||
through dynamic memory allocation, and ability to set a mark flag.
|
through dynamic memory allocation, and ability to set a mark flag.
|
||||||
|
@ -12,8 +12,6 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include "buffer.h"
|
#include "buffer.h"
|
||||||
|
@ -36,18 +34,39 @@ Buffer* b_create(short init_capacity, char inc_factor, char o_mode) {
|
||||||
|
|
||||||
/* BEGIN CONFIGURING BUFFER */
|
/* BEGIN CONFIGURING BUFFER */
|
||||||
|
|
||||||
/* Check if init_capacitt is whithin acceptable range */
|
/* Check if init_capacity is within acceptable range */
|
||||||
if (init_capacity > SHRT_MAX || init_capacity < MIN_CAPACITY) {
|
if (init_capacity > SHRT_MAX || init_capacity < MIN_CAPACITY) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
/* Leaving cb_head allocation for last in the event of bad input */
|
||||||
|
|
||||||
|
|
||||||
/* Memory allocation */
|
/* Memory allocation */
|
||||||
pBD = (Buffer *) calloc(1, sizeof(Buffer));
|
pBD = (Buffer *) calloc(1, sizeof(Buffer));
|
||||||
if (!pBD) {
|
if (!pBD) {
|
||||||
return NULL; /* Abort execution immediatelly if allocation fails */
|
return NULL; /* Abort execution immediatelly if allocation fails */
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Attempt to allocate memory to cb_head */
|
/* Check and set operation mode */
|
||||||
|
if (o_mode == 'f' || inc_factor == FIX_INC_FACTOR) {
|
||||||
|
pBD->mode = FIX_OP_MODE;
|
||||||
|
pBD->inc_factor = FIX_INC_FACTOR;
|
||||||
|
} else if (o_mode == 'a'
|
||||||
|
&& (inc_factor >= MIN_INC_FACTOR)
|
||||||
|
&& (inc_factor <= MAX_ADD_INC_FACTOR)) {
|
||||||
|
pBD->mode = ADD_OP_MODE;
|
||||||
|
pBD->inc_factor = inc_factor;
|
||||||
|
} else if (o_mode == 'm'
|
||||||
|
&& (inc_factor >= MIN_MUL_INC_FACTOR)
|
||||||
|
&& (inc_factor <= MAX_MUL_INC_FACTOR)) {
|
||||||
|
pBD->mode = MUL_OP_MODE;
|
||||||
|
pBD->inc_factor = inc_factor;
|
||||||
|
} else { /* Abort everything if any parameters are bad */
|
||||||
|
free(pBD);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Attempt to initialize cb_head */
|
||||||
pBD->cb_head = (char *) malloc(sizeof(char) * init_capacity);
|
pBD->cb_head = (char *) malloc(sizeof(char) * init_capacity);
|
||||||
/* Abort configuration if allocation fails and release memory */
|
/* Abort configuration if allocation fails and release memory */
|
||||||
if (!pBD->cb_head) {
|
if (!pBD->cb_head) {
|
||||||
|
@ -55,21 +74,6 @@ Buffer* b_create(short init_capacity, char inc_factor, char o_mode) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Check and set operation mode */
|
|
||||||
if (o_mode == 'f' || inc_factor == FIX_INC_FACTOR) {
|
|
||||||
pBD->mode = FIX_OP_MODE;
|
|
||||||
pBD->inc_factor = FIX_INC_FACTOR;
|
|
||||||
} else if (o_mode == 'a' && (inc_factor >= MIN_INC_FACTOR)) {
|
|
||||||
pBD->mode = ADD_OP_MODE;
|
|
||||||
pBD->inc_factor = inc_factor;
|
|
||||||
} else if (o_mode == 'm' && (inc_factor >= MIN_INC_FACTOR && inc_factor <= MAX_MUL_INC_FACTOR)) {
|
|
||||||
pBD->mode = MUL_OP_MODE;
|
|
||||||
pBD->inc_factor = inc_factor;
|
|
||||||
} else { /* Abort everything if parameters out of range (where applicable) */
|
|
||||||
free(pBD);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
pBD->capacity = init_capacity;
|
pBD->capacity = init_capacity;
|
||||||
/* END CONFIGURING BUFFER */
|
/* END CONFIGURING BUFFER */
|
||||||
return pBD;
|
return pBD;
|
||||||
|
|
1
buffer.h
1
buffer.h
|
@ -43,6 +43,7 @@
|
||||||
#define MIN_CAPACITY 1 /* minimum character buffer capacity */
|
#define MIN_CAPACITY 1 /* minimum character buffer capacity */
|
||||||
#define FIX_INC_FACTOR 0 /* fixed increment factor constant */
|
#define FIX_INC_FACTOR 0 /* fixed increment factor constant */
|
||||||
#define MIN_INC_FACTOR 1 /* minimum additive increment factor constant */
|
#define MIN_INC_FACTOR 1 /* minimum additive increment factor constant */
|
||||||
|
#define MIN_MUL_INC_FACTOR 1 /* minumum multiplicative increment factor constant */
|
||||||
#define MAX_ADD_INC_FACTOR 255 /* maximum additive increment factor constant */
|
#define MAX_ADD_INC_FACTOR 255 /* maximum additive increment factor constant */
|
||||||
#define MAX_MUL_INC_FACTOR 100 /* maximum multiplicative increment factor constant */
|
#define MAX_MUL_INC_FACTOR 100 /* maximum multiplicative increment factor constant */
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue