INGOR
ytValue.h
1/*
2 lang/ytValue.{h,c} : Arbitrary value wrapper
3 Copyright (C) 2018, Yoshinori Tamada <tamada A T ytlab.jp>
4 All rights reserved.
5
6 Redistribution and use in source and binary forms, with or without
7 modification, are permitted provided that the following conditions
8 are met:
9
10 * Redistributions of source code must retain the above copyright
11 notice, this list of conditions and the following disclaimer.
12
13 * Redistributions in binary form must reproduce the above copyright
14 notice, this list of conditions and the following disclaimer in
15 the documentation and/or other materials provided with the
16 distribution.
17
18 * Neither the name of Kyoto University nor the names of its
19 contributors may be used to endorse or promote products derived
20 from this software without specific prior written permission.
21
22 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
25 FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
26 COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
27 INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
28 BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
29 LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
30 CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31 LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
32 ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
33 POSSIBILITY OF SUCH DAMAGE.
34*/
35
36#ifndef __YTLIB_VALUE_H
37#define __YTLIB_VALUE_H
38
39#include "ytObject.h"
40
41typedef struct {
42 ytObject obj;
43 void * ptr;
44} ytValue;
45
46ytValue * ytValue_new(void * ptr, ytType type);
47void ytValue_delete(void * this);
48ytObject * ytValue_newObject(void * ptr, ytType type);
49ytObject * ytValue_NULL();
50void * ytValue_ptr(ytObject * this);
51ytObject * ytValue_char_ptr(char * ptr);
52ytObject * ytCHAR_PTR(char * ptr);
54ytObject * ytValue_charP(char * ptr);
55ytObject * ytValue_charPP(char ** ptr);
56ytObject * ytValue_str(char * ptr);
57ytObject * ytValue_strCopy(const char * ptr);
58ytObject * ytValue_int(int value);
59int ytValue_intValue(const ytObject * this);
60void ytValue_intSet(ytObject * obj, int value);
61ytObject * ytValue_intP(int * ptr);
62ytObject * ytValue_double(double value);
63double ytValue_doubleValue(const ytObject * obj);
64void ytValue_doubleSet(ytObject * obj, double value);
65ytObject * ytValue_doubleP(double * ptr);
66char * ytValue_to_char_ptr(ytValue * obj);
67char * ytValue_strValue(const ytObject * obj);
68char * ytValue_objCharP(ytObject * obj);
69ytObject * ytValue_size_t(size_t value);
70size_t ytValue_size_tValue(const ytObject * obj);
71void * ytValue_objVoidP(ytObject * obj);
72void ytValue_setINT_PR(ytObject * a, int v);
73void ytValue_setUINT_PR(ytObject * a, unsigned int v);
74void ytValue_setDOUBLE_PR(ytObject * a, double v);
75void ytValue_setCHAR_PPR(ytObject * a, char * v);
76
77#endif /* __YTLIB_VALUE_H */
The basis class.
ytType
Types supported by ytLib.
Definition: ytType.h:41
Wrapper class for primitive and other arbitrary types.
Definition: ytValue.h:41
void ytValue_doubleSet(ytObject *obj, double value)
Sets a double integer value in the ytType_DOUBLE ytObject instance.
Definition: ytValue.c:183
char * ytValue_strValue(const ytObject *obj)
Converts ytObjbect of type ytType_CHAR_P to char pointer.
Definition: ytValue.c:206
ytObject * ytValue_obj(ytValue *val)
Returns a ytObject pointer of the ytValue instance.
Definition: ytValue.c:65
ytObject * ytValue_double(double value)
Definition: ytValue.c:159
void ytValue_intSet(ytObject *obj, int value)
Sets an integer value in the ytType_INT ytObject instance.
Definition: ytValue.c:145
int ytValue_intValue(const ytObject *obj)
Returns integer value.
Definition: ytValue.c:134
ytObject * ytValue_str(char *ptr)
Returns the ytObject instance containing the given char pointer.
Definition: ytValue.c:193
ytObject * ytValue_strCopy(const char *ptr)
Returns the ytObject instance containing the copy of the given char pointer.
Definition: ytValue.c:198
ytObject * ytValue_size_t(size_t value)
Returns the ytObject instance representing the given size_t value.
Definition: ytValue.c:225
double ytValue_doubleValue(const ytObject *obj)
Returns a double value.
Definition: ytValue.c:172
ytObject * ytValue_int(int value)
Returns the ytObject representing the given integer value.
Definition: ytValue.c:121
void ytValue_delete(void *this)
Deletes the ytValue instance.
Definition: ytValue.c:260
ytObject * ytValue_newObject(void *ptr, ytType type)
Creates a new ytValue instance that wraps given value, and returns it as a pointer to ytObject.
Definition: ytValue.c:74
void * ytValue_ptr(ytObject *this)
Returns the pointer to which this ytValue instance points.
Definition: ytValue.c:84
size_t ytValue_size_tValue(const ytObject *obj)
Returns a size_t value of this object.
Definition: ytValue.c:235