Rudiments
linkedlistutilinlines.h
1 // Copyright (c) 2003 David Muse
2 // See the COPYING file for more information.
3 
4 #ifndef EXCLUDE_RUDIMENTS_TEMPLATE_IMPLEMENTATIONS
5 
6 #include <rudiments/charstring.h>
7 
8 #include <stdio.h>
9 
10 #include <rudiments/private/rudimentsinlines.h>
11 
12 #ifdef RUDIMENTS_NAMESPACE
13 namespace rudiments {
14 #endif
15 
16 template <class datatype>
17 RUDIMENTS_TEMPLATE_INLINE
18 int32_t linkedlistutil<datatype>::compare(datatype data1,
19  datatype data2) const {
20  if (data1<data2) {
21  return -1;
22  } else if (data1==data2) {
23  return 0;
24  } else {
25  return 1;
26  }
27 }
28 
29 RUDIMENTS_EXPLICIT_SPECIALIZATION
30 RUDIMENTS_TEMPLATE_INLINE
31 void linkedlistutil<char *>::print(char *data) const {
32  printf("%s",data);
33 }
34 
35 RUDIMENTS_EXPLICIT_SPECIALIZATION
36 RUDIMENTS_TEMPLATE_INLINE
37 void linkedlistutil<const char *>::print(const char *data) const {
38  printf("%s",data);
39 }
40 
41 RUDIMENTS_EXPLICIT_SPECIALIZATION
42 RUDIMENTS_TEMPLATE_INLINE
43 int32_t linkedlistutil<char *>::compare(char *data1, char *data2) const {
44  return charstring::compare(data1,data2);
45 }
46 
47 RUDIMENTS_EXPLICIT_SPECIALIZATION
48 RUDIMENTS_TEMPLATE_INLINE
49 int32_t linkedlistutil<const char *>::compare(const char *data1,
50  const char *data2) const {
51  return charstring::compare(data1,data2);
52 }
53 
54 RUDIMENTS_EXPLICIT_SPECIALIZATION
55 RUDIMENTS_TEMPLATE_INLINE
56 void linkedlistutil<char>::print(char data) const {
57  printf("%c",data);
58 }
59 
60 RUDIMENTS_EXPLICIT_SPECIALIZATION
61 RUDIMENTS_TEMPLATE_INLINE
62 void linkedlistutil<int32_t>::print(int32_t data) const {
63  // some compilers complain without this cast
64  printf("%d",(int)data);
65 }
66 
67 RUDIMENTS_EXPLICIT_SPECIALIZATION
68 RUDIMENTS_TEMPLATE_INLINE
69 void linkedlistutil<int16_t>::print(int16_t data) const {
70  printf("%hd",data);
71 }
72 
73 RUDIMENTS_EXPLICIT_SPECIALIZATION
74 RUDIMENTS_TEMPLATE_INLINE
75 void linkedlistutil<int64_t>::print(int64_t data) const {
76  // compilers complain if this isn't cast to a long long
77  printf("%lld",(long long)data);
78 }
79 
80 RUDIMENTS_EXPLICIT_SPECIALIZATION
81 RUDIMENTS_TEMPLATE_INLINE
82 void linkedlistutil<float>::print(float data) const {
83  printf("%f",data);
84 }
85 
86 RUDIMENTS_EXPLICIT_SPECIALIZATION
87 RUDIMENTS_TEMPLATE_INLINE
88 void linkedlistutil<double>::print(double data) const {
89  printf("%f",data);
90 }
91 
92 template <class datatype>
93 RUDIMENTS_TEMPLATE_INLINE
94 void linkedlistutil<datatype>::print(datatype data) const {
95  printf("%llx",(uint64_t)data);
96 }
97 
98 #ifdef RUDIMENTS_NAMESPACE
99 }
100 #endif
101 
102 #endif