libdmtx 0.7.8.7
libdmtx is a software library that enables programs to read and write Data Matrix barcodes of the modern ECC200 variety.
Loading...
Searching...
No Matches
dmtxbytelist.c
Go to the documentation of this file.
1
16#include <stdio.h>
17#include <string.h>
18
19#include "dmtx.h"
20
25extern DmtxByteList dmtxByteListBuild(DmtxByte *storage, int capacity)
26{
27 DmtxByteList list;
28
29 list.b = storage;
30 list.capacity = capacity;
31 list.length = 0;
32
33 return list;
34}
35
40extern void dmtxByteListInit(DmtxByteList *list, int length, DmtxByte value, DmtxPassFail *passFail)
41{
42 if (length > list->capacity) {
43 *passFail = DmtxFail;
44 } else {
45 list->length = length;
46 memset(list->b, value, sizeof(DmtxByte) * list->capacity);
47 *passFail = DmtxPass;
48 }
49}
50
56{
57 memset(list->b, 0x00, sizeof(DmtxByte) * list->capacity);
58 list->length = 0;
59}
60
66{
67 return (list->length < list->capacity) ? DmtxTrue : DmtxFalse;
68}
69
74extern void dmtxByteListCopy(DmtxByteList *dst, const DmtxByteList *src, DmtxPassFail *passFail)
75{
76 int length;
77
78 if (dst->capacity < src->length) {
79 *passFail = DmtxFail; /* dst must be large enough to hold src data */
80 } else {
81 /* Copy as many bytes as dst can hold or src can provide (smaller of two) */
82 length = (dst->capacity < src->capacity) ? dst->capacity : src->capacity;
83
84 dst->length = src->length;
85 memcpy(dst->b, src->b, sizeof(unsigned char) * length);
86 *passFail = DmtxPass;
87 }
88}
89
94extern void dmtxByteListPush(DmtxByteList *list, DmtxByte value, DmtxPassFail *passFail)
95{
96 if (list->length >= list->capacity) {
97 *passFail = DmtxFail;
98 } else {
99 list->b[list->length++] = value;
100 *passFail = DmtxPass;
101 }
102}
103
109{
110 *passFail = (list->length > 0) ? DmtxPass : DmtxFail;
111
112 return list->b[--(list->length)];
113}
114
119extern void dmtxByteListPrint(DmtxByteList *list, char *prefix)
120{
121 int i;
122
123 if (prefix != NULL) {
124 dmtxLogInfo("%s", prefix);
125 }
126
127 for (i = 0; i < list->length; i++) {
128 dmtxLogInfo(" %d", list->b[i]);
129 }
130
131 fputc('\n', stdout);
132}
libdmtx - Data Matrix Encoding/Decoding Library Copyright 2008, 2009 Mike Laughton.
#define DmtxPassFail
Definition dmtx.h:42
#define DmtxTrue
Definition dmtx.h:47
#define DmtxBoolean
Definition dmtx.h:46
#define DmtxPass
Definition dmtx.h:43
#define DmtxFalse
Definition dmtx.h:48
unsigned char DmtxByte
Definition dmtx.h:293
#define dmtxLogInfo(...)
Definition dmtx.h:69
#define DmtxFail
Definition dmtx.h:44
DmtxBoolean dmtxByteListHasCapacity(DmtxByteList *list)
DmtxByteList dmtxByteListBuild(DmtxByte *storage, int capacity)
void dmtxByteListPush(DmtxByteList *list, DmtxByte value, DmtxPassFail *passFail)
DmtxByte dmtxByteListPop(DmtxByteList *list, DmtxPassFail *passFail)
void dmtxByteListCopy(DmtxByteList *dst, const DmtxByteList *src, DmtxPassFail *passFail)
void dmtxByteListClear(DmtxByteList *list)
void dmtxByteListPrint(DmtxByteList *list, char *prefix)
void dmtxByteListInit(DmtxByteList *list, int length, DmtxByte value, DmtxPassFail *passFail)
DmtxByteList Use signed int for length fields instead of size_t to play nicely with RS arithmetic.