FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
arrayvec/src/arrayvec_impl.rs at master · sugar700/arrayvec · GitHub
sugar700
/
arrayvec
Public
forked from
bluss/arrayvec
Notifications
You must be signed in to change notification settings
Fork
0
Star
0
Code
Pull requests
0
Actions
Projects
Security and quality
0
Insights
Additional navigation options
Code
Pull requests
Actions
Projects
Security and quality
Insights
Expand file tree
Breadcrumbs
arrayvec
/
src
/
arrayvec_impl.rs
Copy path
More file actions
More file actions
Latest commit
History
History
History
86 lines (71 loc) · 2.26 KB
Breadcrumbs
arrayvec
/
src
/
arrayvec_impl.rs
Copy path
File metadata and controls
86 lines (71 loc) · 2.26 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
use
std
::
ptr
;
use
std
::
slice
;
use
crate
::
CapacityError
;
/// Implements basic arrayvec methods - based on a few required methods
/// for length and element access.
pub
(
crate
)
trait
ArrayVecImpl
{
type
Item
;
const
CAPACITY
:
usize
;
fn
len
(
&
self
)
->
usize
;
unsafe
fn
set_len
(
&
mut
self
,
new_len
:
usize
)
;
/// Return a slice containing all elements of the vector.
fn
as_slice
(
&
self
)
->
&
[
Self
::
Item
]
{
let
len =
self
.
len
(
)
;
unsafe
{
slice
::
from_raw_parts
(
self
.
as_ptr
(
)
,
len
)
}
}
/// Return a mutable slice containing all elements of the vector.
fn
as_mut_slice
(
&
mut
self
)
->
&
mut
[
Self
::
Item
]
{
let
len =
self
.
len
(
)
;
unsafe
{
std
::
slice
::
from_raw_parts_mut
(
self
.
as_mut_ptr
(
)
,
len
)
}
}
/// Return a raw pointer to the vector's buffer.
fn
as_ptr
(
&
self
)
->
*
const
Self
::
Item
;
/// Return a raw mutable pointer to the vector's buffer.
fn
as_mut_ptr
(
&
mut
self
)
->
*
mut
Self
::
Item
;
fn
push
(
&
mut
self
,
element
:
Self
::
Item
)
{
self
.
try_push
(
element
)
.
unwrap
(
)
}
fn
try_push
(
&
mut
self
,
element
:
Self
::
Item
)
->
Result
<
(
)
,
CapacityError
<
Self
::
Item
>
>
{
if
self
.
len
(
)
<
Self
::
CAPACITY
{
unsafe
{
self
.
push_unchecked
(
element
)
;
}
Ok
(
(
)
)
}
else
{
Err
(
CapacityError
::
new
(
element
)
)
}
}
unsafe
fn
push_unchecked
(
&
mut
self
,
element
:
Self
::
Item
)
{
let
len =
self
.
len
(
)
;
debug_assert
!
(
len <
Self
::
CAPACITY
)
;
ptr
::
write
(
self
.
as_mut_ptr
(
)
.
add
(
len
)
,
element
)
;
self
.
set_len
(
len +
1
)
;
}
fn
pop
(
&
mut
self
)
->
Option
<
Self
::
Item
>
{
if
self
.
len
(
)
==
0
{
return
None
;
}
unsafe
{
let
new_len =
self
.
len
(
)
-
1
;
self
.
set_len
(
new_len
)
;
Some
(
ptr
::
read
(
self
.
as_ptr
(
)
.
add
(
new_len
)
)
)
}
}
fn
clear
(
&
mut
self
)
{
self
.
truncate
(
0
)
}
fn
truncate
(
&
mut
self
,
new_len
:
usize
)
{
unsafe
{
let
len =
self
.
len
(
)
;
if
new_len < len
{
self
.
set_len
(
new_len
)
;
let
tail = slice
::
from_raw_parts_mut
(
self
.
as_mut_ptr
(
)
.
add
(
new_len
)
,
len - new_len
)
;
ptr
::
drop_in_place
(
tail
)
;
}
}
}
}
Back
|
FazBrowse Home
|
New Git URL