4 #include <rudiments/stdio.h>
5 #include <rudiments/private/rudimentsinlines.h>
6 #include <rudiments/private/linkedlistutilinlines.h>
8 #define LINKEDLIST_TEMPLATE template <class valuetype>
10 #define LINKEDLIST_CLASS linkedlist<valuetype>
13 RUDIMENTS_TEMPLATE_INLINE
14 LINKEDLIST_CLASS::linkedlist() {
21 RUDIMENTS_TEMPLATE_INLINE
22 LINKEDLIST_CLASS::~linkedlist() {
27 RUDIMENTS_TEMPLATE_INLINE
28 void LINKEDLIST_CLASS::append(valuetype value) {
33 RUDIMENTS_TEMPLATE_INLINE
47 RUDIMENTS_TEMPLATE_INLINE
48 bool LINKEDLIST_CLASS::insert(uint64_t index, valuetype value) {
53 RUDIMENTS_TEMPLATE_INLINE
59 first->setPrevious(node);
72 current->
getNext()->setPrevious(node);
79 RUDIMENTS_TEMPLATE_INLINE
80 bool LINKEDLIST_CLASS::setValueByIndex(uint64_t index, valuetype value) {
90 RUDIMENTS_TEMPLATE_INLINE
91 bool LINKEDLIST_CLASS::removeByIndex(uint64_t index) {
92 return removeNode(getNodeByIndex(index));
96 RUDIMENTS_TEMPLATE_INLINE
97 bool LINKEDLIST_CLASS::removeByValue(valuetype value) {
99 current; current=current->
getNext()) {
100 if (!current->
compare(value)) {
101 return removeNode(current);
108 RUDIMENTS_TEMPLATE_INLINE
109 bool LINKEDLIST_CLASS::removeAllByValue(valuetype value) {
115 if (!current->
compare(value) && !removeNode(current)) {
124 RUDIMENTS_TEMPLATE_INLINE
147 RUDIMENTS_TEMPLATE_INLINE
148 bool LINKEDLIST_CLASS::getValueByIndex(uint64_t index, valuetype *value) {
158 RUDIMENTS_TEMPLATE_INLINE
159 uint64_t LINKEDLIST_CLASS::getLength()
const {
164 RUDIMENTS_TEMPLATE_INLINE
170 RUDIMENTS_TEMPLATE_INLINE
176 RUDIMENTS_TEMPLATE_INLINE
180 for (uint64_t i=0; current && i<index; i++) {
187 RUDIMENTS_TEMPLATE_INLINE
193 RUDIMENTS_TEMPLATE_INLINE
198 current; current=current->
getNext()) {
199 if (!current->
compare(value)) {
207 RUDIMENTS_TEMPLATE_INLINE
208 void LINKEDLIST_CLASS::clear() {
222 RUDIMENTS_TEMPLATE_INLINE
223 void LINKEDLIST_CLASS::print()
const {
226 current; current=current->
getNext()) {
227 stdoutput.
printf(
"index %lld: ",(
long long)i);
234 #define LINKEDLISTNODE_TEMPLATE template <class valuetype>
236 #define LINKEDLISTNODE_CLASS linkedlistnode<valuetype>
238 LINKEDLISTNODE_TEMPLATE
239 RUDIMENTS_TEMPLATE_INLINE
240 LINKEDLISTNODE_CLASS::linkedlistnode(valuetype value) {
246 LINKEDLISTNODE_TEMPLATE
247 RUDIMENTS_TEMPLATE_INLINE
248 LINKEDLISTNODE_CLASS::~linkedlistnode() {
251 LINKEDLISTNODE_TEMPLATE
252 RUDIMENTS_TEMPLATE_INLINE
253 void LINKEDLISTNODE_CLASS::setValue(valuetype value) {
257 LINKEDLISTNODE_TEMPLATE
258 RUDIMENTS_TEMPLATE_INLINE
259 valuetype LINKEDLISTNODE_CLASS::getValue()
const {
263 LINKEDLISTNODE_TEMPLATE
264 RUDIMENTS_TEMPLATE_INLINE
265 void LINKEDLISTNODE_CLASS::setPrevious(LINKEDLISTNODE_CLASS *previous) {
266 this->previous=previous;
269 LINKEDLISTNODE_TEMPLATE
270 RUDIMENTS_TEMPLATE_INLINE
271 void LINKEDLISTNODE_CLASS::setNext(LINKEDLISTNODE_CLASS *next) {
275 LINKEDLISTNODE_TEMPLATE
276 RUDIMENTS_TEMPLATE_INLINE
277 LINKEDLISTNODE_CLASS *LINKEDLISTNODE_CLASS::getPrevious() {
281 LINKEDLISTNODE_TEMPLATE
282 RUDIMENTS_TEMPLATE_INLINE
283 LINKEDLISTNODE_CLASS *LINKEDLISTNODE_CLASS::getNext() {
287 LINKEDLISTNODE_TEMPLATE
288 RUDIMENTS_TEMPLATE_INLINE
289 int32_t LINKEDLISTNODE_CLASS::compare(valuetype value)
const {
290 return _linkedlistutil_compare(this->value,value);
293 LINKEDLISTNODE_TEMPLATE
294 RUDIMENTS_TEMPLATE_INLINE
295 void LINKEDLISTNODE_CLASS::print()
const {
296 _linkedlistutil_print(value);