diff options
| author | Keith Packard <keithp@keithp.com> | 2017-12-10 00:02:00 -0800 | 
|---|---|---|
| committer | Keith Packard <keithp@keithp.com> | 2017-12-10 00:02:00 -0800 | 
| commit | 17fe6de833cccb6d43d0ac0ed84a4faaa3463a09 (patch) | |
| tree | c51ea265efd63b11473eaae7c816ce067b98df99 /src/scheme/ao_scheme.h | |
| parent | 0d3365e2c04793cd8432c30a66881f53385a2e60 (diff) | |
altos/scheme: Add vectors
Constant time and smaller can be a feature.
Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'src/scheme/ao_scheme.h')
| -rw-r--r-- | src/scheme/ao_scheme.h | 48 | 
1 files changed, 47 insertions, 1 deletions
| diff --git a/src/scheme/ao_scheme.h b/src/scheme/ao_scheme.h index 10518716..89616617 100644 --- a/src/scheme/ao_scheme.h +++ b/src/scheme/ao_scheme.h @@ -104,7 +104,8 @@ extern uint8_t		ao_scheme_pool[AO_SCHEME_POOL + AO_SCHEME_POOL_EXTRA] __attribut  #define AO_SCHEME_BOOL		10  #define AO_SCHEME_BIGINT	11  #define AO_SCHEME_FLOAT		12 -#define AO_SCHEME_NUM_TYPE	13 +#define AO_SCHEME_VECTOR	13 +#define AO_SCHEME_NUM_TYPE	14  /* Leave two bits for types to use as they please */  #define AO_SCHEME_OTHER_TYPE_MASK	0x3f @@ -192,6 +193,13 @@ struct ao_scheme_float {  	float			value;  }; +struct ao_scheme_vector { +	uint8_t			type; +	uint8_t			pad1; +	uint16_t		length; +	ao_poly			vals[]; +}; +  #if __BYTE_ORDER == __LITTLE_ENDIAN  static inline uint32_t  ao_scheme_int_bigint(int32_t i) { @@ -500,6 +508,18 @@ ao_scheme_poly_float(ao_poly poly)  float  ao_scheme_poly_number(ao_poly p); +static inline ao_poly +ao_scheme_vector_poly(struct ao_scheme_vector *v) +{ +	return ao_scheme_poly(v, AO_SCHEME_OTHER); +} + +static inline struct ao_scheme_vector * +ao_scheme_poly_vector(ao_poly poly) +{ +	return ao_scheme_ref(poly); +} +  /* memory functions */  extern int ao_scheme_collects[2]; @@ -680,6 +700,32 @@ void  ao_scheme_bigint_write(ao_poly i);  extern const struct ao_scheme_type	ao_scheme_bigint_type; + +/* vector */ + +void +ao_scheme_vector_write(ao_poly v); + +void +ao_scheme_vector_display(ao_poly v); + +struct ao_scheme_vector * +ao_scheme_vector_alloc(uint16_t length, ao_poly fill); + +ao_poly +ao_scheme_vector_get(ao_poly v, ao_poly i); + +ao_poly +ao_scheme_vector_set(ao_poly v, ao_poly i, ao_poly p); + +struct ao_scheme_vector * +ao_scheme_list_to_vector(struct ao_scheme_cons *cons); + +struct ao_scheme_cons * +ao_scheme_vector_to_list(struct ao_scheme_vector *vector); + +extern const struct ao_scheme_type	ao_scheme_vector_type; +  /* prim */  void  ao_scheme_poly_write(ao_poly p); | 
