libsf3
Loading...
Searching...
No Matches
sf3_table.h
Go to the documentation of this file.
1#ifndef __SF3_TABLE__
2#define __SF3_TABLE__
3#include "sf3_core.h"
4
6#define SF3_FORMAT_ID_TABLE 0x07
7
47
51 uint32_t length;
54 uint8_t type;
57};
58
63 struct sf3_identifier identifier;
65 uint16_t column_count;
67 uint64_t row_length;
69 uint64_t row_count;
71 uint32_t spec_length;
73 struct sf3_column_spec columns[];
74};
75
77SF3_INLINE const char *sf3_table_data(const struct sf3_table *table){
78 return ((char*)table->columns)+table->spec_length;
79}
80
86 return (struct sf3_column_spec *)SF3_SKIP_STR(column->name);
87}
88
91SF3_INLINE const struct sf3_column_spec *sf3_table_column(const struct sf3_table *table, uint16_t column){
92 if(table->column_count <= column) return 0;
93 const struct sf3_column_spec *col = table->columns;
94 for(uint16_t i=0; i<column; ++i){
95 col = sf3_table_next_column(col);
96 }
97 return col;
98}
99
102SF3_INLINE const char *sf3_table_row(const struct sf3_table *table, uint64_t row){
103 if(table->row_count <= row) return 0;
104 return sf3_table_data(table)+(table->row_length*row);
105}
106
117SF3_EXPORT const char *sf3_table_cell(const struct sf3_table *table, uint64_t row, uint64_t column, const struct sf3_column_spec **spec){
118 if(table->column_count <= column) return 0;
119 if(table->row_count <= row) return 0;
120 const struct sf3_column_spec *col = table->columns;
121 const char *data = sf3_table_row(table, row);
122 for(uint16_t i=0; i<column; ++i){
123 data += col->length;
124 col = sf3_table_next_column(col);
125 }
126 *spec = col;
127 return data;
128}
129
132 return column->type & 0x0F;
133}
134
137 if(column->type == SF3_COLUMN_STRING) return 1;
138 return column->length / (column->type & 0x0F);
139}
140
143 switch(type){
144 case SF3_COLUMN_UINT8: return "uint8";
145 case SF3_COLUMN_UINT16: return "uint16";
146 case SF3_COLUMN_UINT32: return "uint32";
147 case SF3_COLUMN_UINT64: return "uint64";
148 case SF3_COLUMN_INT8: return "int8";
149 case SF3_COLUMN_INT16: return "int16";
150 case SF3_COLUMN_INT32: return "int32";
151 case SF3_COLUMN_INT64: return "int64";
152 case SF3_COLUMN_FLOAT16: return "float16";
153 case SF3_COLUMN_FLOAT32: return "float32";
154 case SF3_COLUMN_FLOAT64: return "float64";
155 case SF3_COLUMN_STRING: return "string";
156 case SF3_COLUMN_TIMESTAMP: return "timestamp";
157 case SF3_COLUMN_HIGH_RESOLUTION_TIMESTAMP: return "high resolution timestamp";
158 case SF3_COLUMN_BOOLEAN: return "boolean";
159 default: return "Unknown";
160 }
161}
162
164SF3_EXPORT size_t sf3_table_size(const struct sf3_table *table){
165 const char *data = sf3_table_data(table);
166 const void *start = (const void *)table;
167 const void *end = (const void *)(data + table->row_length * table->row_count);
168 return (end-start);
169}
170#endif
#define SF3_INLINE
Definition sf3_core.h:16
#define SF3_EXPORT
Definition sf3_core.h:13
#define SF3_PACK
Definition sf3_core.h:9
#define SF3_SKIP_STR(STR)
Macro to retrieve a pointer past the variable size of an SF3 string.
Definition sf3_core.h:59
SF3_INLINE const struct sf3_column_spec * sf3_table_next_column(const struct sf3_column_spec *column)
Definition sf3_table.h:85
SF3_EXPORT const char * sf3_table_cell(const struct sf3_table *table, uint64_t row, uint64_t column, const struct sf3_column_spec **spec)
Definition sf3_table.h:117
SF3_INLINE uint8_t sf3_table_element_size(const struct sf3_column_spec *column)
Returns the number of bytes per element of the given column.
Definition sf3_table.h:131
SF3_INLINE const struct sf3_column_spec * sf3_table_column(const struct sf3_table *table, uint16_t column)
Definition sf3_table.h:91
SF3_INLINE uint32_t sf3_table_element_count(const struct sf3_column_spec *column)
Returns the number of elements in a cell of the given column.
Definition sf3_table.h:136
SF3_EXPORT const char * sf3_table_column_type(enum sf3_column_type type)
Returns a human-readable string description of the column type.
Definition sf3_table.h:142
SF3_INLINE const char * sf3_table_row(const struct sf3_table *table, uint64_t row)
Definition sf3_table.h:102
SF3_INLINE const char * sf3_table_data(const struct sf3_table *table)
Returns a pointer to the encoded table data.
Definition sf3_table.h:77
sf3_column_type
The column value types that can be stored.
Definition sf3_table.h:9
@ SF3_COLUMN_FLOAT32
Definition sf3_table.h:31
@ SF3_COLUMN_HIGH_RESOLUTION_TIMESTAMP
Definition sf3_table.h:42
@ SF3_COLUMN_UINT16
The column elements are stored in 16-bit unsigned format.
Definition sf3_table.h:13
@ SF3_COLUMN_INT8
The column elements are stored in 8-bit signed format.
Definition sf3_table.h:19
@ SF3_COLUMN_FLOAT16
Definition sf3_table.h:28
@ SF3_COLUMN_INT64
The column elements are stored in 64-bit signed format.
Definition sf3_table.h:25
@ SF3_COLUMN_TIMESTAMP
Definition sf3_table.h:39
@ SF3_COLUMN_FLOAT64
Definition sf3_table.h:34
@ SF3_COLUMN_UINT64
The column elements are stored in 64-bit unsigned format.
Definition sf3_table.h:17
@ SF3_COLUMN_UINT32
The column elements are stored in 32-bit unsigned format.
Definition sf3_table.h:15
@ SF3_COLUMN_STRING
The column element is a singular null-terminated string.
Definition sf3_table.h:36
@ SF3_COLUMN_BOOLEAN
Definition sf3_table.h:45
@ SF3_COLUMN_UINT8
The column elements are stored in 8-bit unsigned format.
Definition sf3_table.h:11
@ SF3_COLUMN_INT16
The column elements are stored in 16-bit signed format.
Definition sf3_table.h:21
@ SF3_COLUMN_INT32
The column elements are stored in 32-bit signed format.
Definition sf3_table.h:23
SF3_EXPORT size_t sf3_table_size(const struct sf3_table *table)
Computes the size of the table file in bytes.
Definition sf3_table.h:164
Description of a column within the table.
Definition sf3_table.h:49
uint32_t length
The length of the column's values in bytes.
Definition sf3_table.h:51
sf3_str16 name
The name of the column.
Definition sf3_table.h:56
The basic header structure of every SF3 file.
Definition sf3_core.h:70
uint32_t spec_length
The length of all the column specs in bytes.
Definition sf3_table.h:71
uint64_t row_length
The length of each row in bytes.
Definition sf3_table.h:67
uint64_t row_count
The number of rows in the table.
Definition sf3_table.h:69
uint16_t column_count
The number of columns in the table.
Definition sf3_table.h:65
struct sf3_column_spec columns[]
The column descriptions.
Definition sf3_table.h:73