Rudiments
linkedlistutilinlines.h
1 // Copyright (c) 2003 David Muse
2 // See the COPYING file for more information.
3 
4 #include <rudiments/charstring.h>
5 #include <rudiments/stdio.h>
6 
7 #include <rudiments/private/rudimentsinlines.h>
8 
9 // Ideally we'd use explicit specialization here but old enough
10 // compilers don't support it and this isn't any less efficient.
11 
12 RUDIMENTS_TEMPLATE_INLINE
13 int32_t _linkedlistutil_compare(char *value1, char *value2) {
14  return charstring::compare(value1,value2);
15 }
16 
17 RUDIMENTS_TEMPLATE_INLINE
18 int32_t _linkedlistutil_compare(const char *value1, const char *value2) {
19  return charstring::compare(value1,value2);
20 }
21 
22 template <class valuetype>
23 RUDIMENTS_TEMPLATE_INLINE
24 int32_t _linkedlistutil_compare(valuetype value1, valuetype value2) {
25  if (value1<value2) {
26  return -1;
27  } else if (value1==value2) {
28  return 0;
29  } else {
30  return 1;
31  }
32 }
33 
34 template <class valuetype>
35 RUDIMENTS_TEMPLATE_INLINE
36 int32_t linkedlistutil<valuetype>::compare(valuetype value1,
37  valuetype value2) const {
38  return _linkedlistutil_compare(value1,value2);
39 }
40 
41 RUDIMENTS_TEMPLATE_INLINE
42 void _linkedlistutil_print(const char *value) {
43  stdoutput.printf("%s",value);
44 }
45 
46 RUDIMENTS_TEMPLATE_INLINE
47 void _linkedlistutil_print(char *value) {
48  stdoutput.printf("%s",value);
49 }
50 
51 RUDIMENTS_TEMPLATE_INLINE
52 void _linkedlistutil_print(char value) {
53  stdoutput.printf("%c",value);
54 }
55 
56 RUDIMENTS_TEMPLATE_INLINE
57 void _linkedlistutil_print(int32_t value) {
58  stdoutput.printf("%d",(int)value);
59 }
60 
61 RUDIMENTS_TEMPLATE_INLINE
62 void _linkedlistutil_print(int16_t value) {
63  stdoutput.printf("%hd",value);
64 }
65 
66 RUDIMENTS_TEMPLATE_INLINE
67 void _linkedlistutil_print(int64_t value) {
68  stdoutput.printf("%lld",(long long)value);
69 }
70 
71 RUDIMENTS_TEMPLATE_INLINE
72 void _linkedlistutil_print(float value) {
73  stdoutput.printf("%f",value);
74 }
75 
76 RUDIMENTS_TEMPLATE_INLINE
77 void _linkedlistutil_print(double value) {
78  stdoutput.printf("%f",value);
79 }
80 
81 template <class valuetype>
82 RUDIMENTS_TEMPLATE_INLINE
83 void _linkedlistutil_print(valuetype value) {
84  stdoutput.printf("%p",value);
85 }
86 
87 template <class valuetype>
88 RUDIMENTS_TEMPLATE_INLINE
89 void linkedlistutil<valuetype>::print(valuetype value) const {
90  _linkedlistutil_print(value);
91 }