Rev 4979 | Rev 5023 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 4979 | Rev 4997 | ||
---|---|---|---|
Line -... | Line 1... | ||
- | 1 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
|
- | 2 | ;; ;; |
|
- | 3 | ;; Copyright (C) KolibriOS team 2004-2014. All rights reserved. ;; |
|
- | 4 | ;; Distributed under terms of the GNU General Public License ;; |
|
- | 5 | ;; ;; |
|
- | 6 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
|
- | 7 | ||
1 | head dd 0 |
8 | head dd 0 |
2 | node equ ftdi_context |
- | |
3 | node.next equ ftdi_context.next_context |
- | |
4 | linkedlist: |
9 | size dd 0 |
Line 5... | Line 10... | ||
5 | 10 | ||
6 | .add: |
11 | linkedlist_add: |
7 | push ebx |
12 | push ebx |
8 | mov ebx, [head] |
13 | mov ebx, [head] |
9 | mov [head], eax |
14 | mov [head], eax |
10 | mov [eax + node.next], ebx |
15 | mov [eax + node.next], ebx |
11 | pop ebx |
16 | pop ebx |
Line 12... | Line 17... | ||
12 | ret |
17 | ret |
13 | 18 | ||
14 | .delete: |
19 | linkedlist_delete: |
15 | push ebx ecx |
20 | push ebx ecx |
16 | mov ebx, eax ; eax - pointer to node for delete |
21 | mov ebx, eax ; eax - pointer to node for delete |
Line 28... | Line 33... | ||
28 | .unlink: |
33 | .unlink: |
29 | mov ecx, [eax+node.next] |
34 | mov ecx, [eax+node.next] |
30 | mov [ebx+node.next], ecx |
35 | mov [ebx+node.next], ecx |
31 | jmp @f |
36 | jmp @f |
Line 32... | Line -... | ||
32 | - | ||
33 | 37 | ||
34 | .unlink_head: |
38 | .unlink_head: |
35 | mov ebx, [eax+node.next] |
39 | mov ebx, [eax+node.next] |
36 | mov [head], ebx |
40 | mov [head], ebx |
37 | @@: |
41 | @@: |
38 | mov ecx, eax |
42 | mov ecx, eax |
39 | call Kfree |
43 | call Kfree |
40 | .invalid_pointer: |
44 | .invalid_pointer: |
41 | pop ecx ebx |
45 | pop ecx ebx |
Line -... | Line 46... | ||
- | 46 | ret |
|
- | 47 | ||
- | 48 | linkedlist_isvalid: |
|
- | 49 | push ebx ecx |
|
42 | ret |
50 | xor ecx, ecx |
- | 51 | mov ebx, [head] |
|
- | 52 | .next_check: |
|
- | 53 | cmp eax, ebx |
|
- | 54 | jz .valid_pointer |
|
- | 55 | mov ebx, [ebx + node.next] |
|
- | 56 | test ebx, ebx |
|
- | 57 | jz .invalid_pointer |
|
- | 58 | jmp .next_check |
|
- | 59 | .invalid_pointer: |
|
- | 60 | inc ecx |
|
- | 61 | .valid_pointer: |
|
- | 62 | mov eax, ecx |
|
- | 63 | pop ecx ebx |
|
- | 64 | ret |
|
43 | 65 | ||
44 | .gethead: |
66 | linkedlist_gethead: |
Line 45... | Line 67... | ||
45 | mov eax, [head] |
67 | mov eax, [head] |
46 | ret |
68 | ret |
47 | 69 |