1 /***********************************************************************/
2 /* Open Visualization Data Explorer */
3 /* (C) Copyright IBM Corp. 1989,1999 */
4 /* ALL RIGHTS RESERVED */
5 /* This code licensed under the */
6 /* "IBM PUBLIC LICENSE - Open Visualization Data Explorer" */
7 /***********************************************************************/
8
9 #include <dxconfig.h>
10
11 #include <string.h>
12 #include "stringClass.h"
13 #include "internals.h"
14
15 char *
DXGetString(String s)16 DXGetString(String s)
17 {
18 CHECK(s, CLASS_STRING);
19 return s->string ? s->string : s->shortstr;
20 }
21
22 Error
_dxfString_Delete(String s)23 _dxfString_Delete(String s)
24 {
25 if (s->string)
26 DXFree(s->string);
27 return OK;
28 }
29
30 #define SHAREDSTRINGS 1
31
32 static String
_NewString(char * s,struct string_class * class)33 _NewString(char *s, struct string_class *class)
34 {
35 int n;
36 String o;
37
38 if (!s)
39 return NULL;
40
41 #if SHAREDSTRINGS
42 o = (String)_dxfstringobject(s, 0);
43 if (o)
44 return o;
45 #endif
46
47 o = (String) _dxf_NewObject((struct object_class *)class);
48 if (!o)
49 return NULL;
50
51 n = strlen(s)+1;
52 if (n <= IMBEDDED) {
53 o->string = NULL;
54 memcpy(o->shortstr, s, n);
55 } else {
56 o->string = DXAllocate(n);
57 if (!o->string) {
58 DXDelete((Object)o);
59 return NULL;
60 }
61 memcpy(o->string, s, n);
62 }
63
64 return o;
65 }
66
67 String
DXNewString(char * s)68 DXNewString(char *s)
69 {
70 return _NewString(s, &_dxdstring_class);
71 }
72
73 Object
_dxfString_Copy(String old,enum _dxd_copy copy)74 _dxfString_Copy(String old, enum _dxd_copy copy)
75 {
76 if (copy==COPY_DATA)
77 DXErrorReturn(ERROR_BAD_PARAMETER, "copying data is not implemented");
78 return (Object)old;
79 }
80
DXMakeString(char * s)81 String DXMakeString(char *s)
82 {
83 return DXNewString(s);
84 }
85