4 #include <rudiments/stdio.h>
5 #include <rudiments/private/rudimentsinlines.h>
7 #define LINKEDLIST_TEMPLATE template <class valuetype>
9 #define LINKEDLIST_CLASS linkedlist<valuetype>
12 RUDIMENTS_TEMPLATE_INLINE
13 LINKEDLIST_CLASS::linkedlist() {
19 RUDIMENTS_TEMPLATE_INLINE
20 LINKEDLIST_CLASS::~linkedlist() {
25 RUDIMENTS_TEMPLATE_INLINE
26 void LINKEDLIST_CLASS::append(valuetype value) {
33 RUDIMENTS_TEMPLATE_INLINE
46 RUDIMENTS_TEMPLATE_INLINE
47 bool LINKEDLIST_CLASS::insert(uint64_t index, valuetype value) {
50 return insert(index,node);
54 RUDIMENTS_TEMPLATE_INLINE
60 first->setPrevious(node);
72 current->
getNext()->setPrevious(node);
78 RUDIMENTS_TEMPLATE_INLINE
79 bool LINKEDLIST_CLASS::setValueByIndex(uint64_t index, valuetype value) {
89 RUDIMENTS_TEMPLATE_INLINE
90 bool LINKEDLIST_CLASS::removeByIndex(uint64_t index) {
91 return removeNode(getNodeByIndex(index));
95 RUDIMENTS_TEMPLATE_INLINE
96 bool LINKEDLIST_CLASS::removeByValue(valuetype value) {
100 return removeNode(current);
107 RUDIMENTS_TEMPLATE_INLINE
108 bool LINKEDLIST_CLASS::removeAllByValue(valuetype value) {
113 if (!current->
compare(value)) {
115 if (!removeNode(current)) {
127 RUDIMENTS_TEMPLATE_INLINE
149 RUDIMENTS_TEMPLATE_INLINE
150 bool LINKEDLIST_CLASS::getValueByIndex(uint64_t index, valuetype *value) {
160 RUDIMENTS_TEMPLATE_INLINE
161 uint64_t LINKEDLIST_CLASS::getLength()
const {
171 RUDIMENTS_TEMPLATE_INLINE
177 RUDIMENTS_TEMPLATE_INLINE
183 RUDIMENTS_TEMPLATE_INLINE
187 for (uint64_t i=0; current && i<index; i++) {
194 RUDIMENTS_TEMPLATE_INLINE
200 RUDIMENTS_TEMPLATE_INLINE
206 if (!current->
compare(value)) {
214 RUDIMENTS_TEMPLATE_INLINE
215 void LINKEDLIST_CLASS::clear() {
228 RUDIMENTS_TEMPLATE_INLINE
229 void LINKEDLIST_CLASS::print()
const {
233 stdoutput.
printf(
"index %lld: ",(
long long)i);