1
0
mirror of https://github.com/deuill/go-php.git synced 2024-09-21 08:50:45 +00:00
go-php/value/value.h
Alex Palaistras 081d7a133f Return values as copies when converting
Previously, value conversions were made on the original value, and thus,
calling methods like `Value.Int` had the side-effect of changing the
value's type for subsequent calls to `Value.Interface`. Any conversion
required happens on value copies, which are automatically destroyed
after use.
2015-10-18 01:13:28 +01:00

44 lines
1.2 KiB
C

// Copyright 2015 Alexander Palaistras. All rights reserved.
// Use of this source code is governed by the MIT license that can be found in
// the LICENSE file.
#ifndef VALUE_H
#define VALUE_H
typedef struct _engine_value {
zval *value;
int kind;
} engine_value;
static inline zval *value_copy(zval *zv) {
zval *tmp;
ALLOC_ZVAL(tmp);
INIT_PZVAL_COPY(tmp, zv);
zval_copy_ctor(tmp);
return tmp;
}
engine_value *value_new(zval *zv);
int value_kind(engine_value *val);
void value_destroy(engine_value *val);
engine_value *value_create_long(long int value);
engine_value *value_create_double(double value);
engine_value *value_create_bool(bool value);
engine_value *value_create_string(char *value);
engine_value *value_create_array(unsigned int size);
void value_array_set_index(engine_value *arr, unsigned long idx, engine_value *val);
void value_array_set_key(engine_value *arr, const char *key, engine_value *val);
engine_value *value_create_object();
void value_object_add_property(engine_value *obj, const char *key, engine_value *val);
int value_get_long(engine_value *val);
double value_get_double(engine_value *val);
bool value_get_bool(engine_value *val);
char *value_get_string(engine_value *val);
#endif