My Project
Toggle main menu visibility
Loading...
Searching...
No Matches
Singular
dyn_modules
systhreads
lintree.h
Go to the documentation of this file.
1
#ifndef _singthread_lintree_h
2
#define _singthread_lintree_h
3
4
#include <string>
5
#include <vector>
6
#include <cstring>
7
#include <
Singular/ipid.h
>
8
9
namespace
LinTree
{
10
11
class
LinTree
;
12
13
typedef
void (*
LinTreeEncodeFunc
)(
LinTree
&lintree,
leftv
val);
14
typedef
leftv
(*
LinTreeDecodeFunc
)(
LinTree
&lintree);
15
typedef
void (*
LinTreeRefFunc
)(
LinTree
&lintree,
int
by);
16
17
extern
std::vector<LinTreeEncodeFunc>
encoders
;
18
extern
std::vector<LinTreeDecodeFunc>
decoders
;
19
extern
std::vector<LinTreeRefFunc>
refupdaters
;
20
21
void
install
(
int
typ,
LinTreeEncodeFunc
enc,
LinTreeDecodeFunc
dec,
22
LinTreeRefFunc
ref);
23
24
class
LinTree
{
25
private
:
26
std::string &
memory
;
27
size_t
cursor
;
28
const
char
*
error
;
29
void
*
last_ring
;
30
public
:
31
LinTree
();
32
LinTree
(
const
LinTree
&other);
33
~LinTree
();
34
LinTree
(std::string &source);
35
LinTree
&
operator=
(
const
LinTree
&other);
36
void
rewind
() {
cursor
= 0; }
37
void
clear
() {
memory
.clear();
cursor
= 0;
error
=
NULL
;
last_ring
=
NULL
; }
38
void
mark_error
(
const
char
*
s
) {
39
error
=
s
;
40
}
41
int
has_error
() {
42
return
error
!=
NULL
;
43
}
44
const
char
*
error_msg
() {
45
return
error
;
46
}
47
template
<
typename
T>
48
T
get
() {
49
T
result
;
50
memcpy(&
result
,
memory
.c_str() +
cursor
,
sizeof
(
T
));
51
cursor
+=
sizeof
(
T
);
52
return
result
;
53
}
54
template
<
typename
T>
55
T
get_prev
() {
56
T
result
;
57
memcpy(&
result
,
memory
.c_str() +
cursor
-
sizeof
(
T
),
sizeof
(
T
));
58
return
result
;
59
}
60
template
<
typename
T>
61
void
put
(
T
data) {
62
memory
.append((
const
char
*) &data,
sizeof
(
T
));
63
}
64
template
<
typename
T>
65
void
skip
() {
66
cursor
+=
sizeof
(
T
);
67
}
68
int
get_int
() {
69
return
get<int>
();
70
}
71
size_t
get_size
() {
72
return
get<size_t>
();
73
}
74
void
put_int
(
int
code) {
75
put
(code);
76
}
77
void
skip_int
() {
78
skip<int>
();
79
}
80
const
char
*
get_bytes
(
size_t
n) {
81
const
char
*
result
=
memory
.c_str() +
cursor
;
82
cursor
+= n;
83
return
result
;
84
}
85
const
char
*
get_addr
() {
86
return
memory
.c_str() +
cursor
;
87
}
88
void
put_bytes
(
char
*
p
,
size_t
n) {
89
memory
.append(
p
, n);
90
}
91
char
*
reserve_bytes
(
size_t
n) {
92
size_t
pos =
memory
.size();
93
memory
.reserve(n);
94
for
(
size_t
i
= 0;
i
< n;
i
++) {
95
memory
+=
'\0'
;
96
}
97
return
(
char
*)(
memory
.c_str() + pos);
98
}
99
void
put_cstring
(
char
*
p
) {
100
size_t
n = strlen(
p
);
101
put
(n);
102
put_bytes
(
p
, n+1);
103
}
104
const
char
*
get_cstring
() {
105
size_t
n =
get_size
();
106
const
char
*
result
=
memory
.c_str() +
cursor
;
107
cursor
+= n + 1;
108
return
result
;
109
}
110
void
skip_cstring
() {
111
size_t
n =
get_size
();
112
cursor
+= n + 1;
113
}
114
void
skip_bytes
(
size_t
n) {
115
cursor
+= n;
116
}
117
std::string &
to_string
() {
118
return
memory
;
119
}
120
void
set_last_ring(
void
*r);
121
int
has_last_ring
() {
122
return
last_ring
!=
NULL
;
123
}
124
void
*
get_last_ring
() {
125
return
last_ring
;
126
}
127
};
128
129
std::string
to_string
(
leftv
val);
130
leftv
from_string
(std::string &str);
131
132
void
init
();
133
134
};
135
136
#endif
i
int i
Definition
cfEzgcd.cc:132
p
int p
Definition
cfModGcd.cc:4086
LinTree::LinTree
Definition
lintree.h:24
LinTree::LinTree::last_ring
void * last_ring
Definition
lintree.h:29
LinTree::LinTree::error
const char * error
Definition
lintree.h:28
LinTree::LinTree::get
T get()
Definition
lintree.h:48
LinTree::LinTree::put_bytes
void put_bytes(char *p, size_t n)
Definition
lintree.h:88
LinTree::LinTree::get_int
int get_int()
Definition
lintree.h:68
LinTree::LinTree::to_string
std::string & to_string()
Definition
lintree.h:117
LinTree::LinTree::skip_int
void skip_int()
Definition
lintree.h:77
LinTree::LinTree::skip_bytes
void skip_bytes(size_t n)
Definition
lintree.h:114
LinTree::LinTree::skip
void skip()
Definition
lintree.h:65
LinTree::LinTree::rewind
void rewind()
Definition
lintree.h:36
LinTree::LinTree::put_cstring
void put_cstring(char *p)
Definition
lintree.h:99
LinTree::LinTree::get_last_ring
void * get_last_ring()
Definition
lintree.h:124
LinTree::LinTree::clear
void clear()
Definition
lintree.h:37
LinTree::LinTree::get_size
size_t get_size()
Definition
lintree.h:71
LinTree::LinTree::reserve_bytes
char * reserve_bytes(size_t n)
Definition
lintree.h:91
LinTree::LinTree::put
void put(T data)
Definition
lintree.h:61
LinTree::LinTree::get_prev
T get_prev()
Definition
lintree.h:55
LinTree::LinTree::operator=
LinTree & operator=(const LinTree &other)
Definition
lintree.cc:888
LinTree::LinTree::get_bytes
const char * get_bytes(size_t n)
Definition
lintree.h:80
LinTree::LinTree::put_int
void put_int(int code)
Definition
lintree.h:74
LinTree::LinTree::has_last_ring
int has_last_ring()
Definition
lintree.h:121
LinTree::LinTree::memory
std::string & memory
Definition
lintree.h:26
LinTree::LinTree::mark_error
void mark_error(const char *s)
Definition
lintree.h:38
LinTree::LinTree::get_cstring
const char * get_cstring()
Definition
lintree.h:104
LinTree::LinTree::has_error
int has_error()
Definition
lintree.h:41
LinTree::LinTree::cursor
size_t cursor
Definition
lintree.h:27
LinTree::LinTree::get_addr
const char * get_addr()
Definition
lintree.h:85
LinTree::LinTree::error_msg
const char * error_msg()
Definition
lintree.h:44
LinTree::LinTree::skip_cstring
void skip_cstring()
Definition
lintree.h:110
result
return result
Definition
facAbsBiFact.cc:76
s
const CanonicalForm int s
Definition
facAbsFact.cc:51
ipid.h
T
STATIC_VAR jList * T
Definition
janet.cc:30
LinTree
Definition
lintree.cc:42
LinTree::init
void init()
Definition
lintree.cc:864
LinTree::decoders
vector< LinTreeDecodeFunc > decoders
Definition
lintree.cc:47
LinTree::LinTreeRefFunc
void(* LinTreeRefFunc)(LinTree &lintree, int by)
Definition
lintree.h:15
LinTree::to_string
std::string to_string(leftv val)
Definition
lintree.cc:843
LinTree::LinTreeDecodeFunc
leftv(* LinTreeDecodeFunc)(LinTree &lintree)
Definition
lintree.h:14
LinTree::refupdaters
vector< LinTreeRefFunc > refupdaters
Definition
lintree.cc:48
LinTree::encoders
vector< LinTreeEncodeFunc > encoders
Definition
lintree.cc:46
LinTree::install
void install(int typ, LinTreeEncodeFunc enc, LinTreeDecodeFunc dec, LinTreeRefFunc ref)
Definition
lintree.cc:51
LinTree::from_string
leftv from_string(std::string &str)
Definition
lintree.cc:854
LinTree::LinTreeEncodeFunc
void(* LinTreeEncodeFunc)(LinTree &lintree, leftv val)
Definition
lintree.h:13
NULL
#define NULL
Definition
omList.c:12
leftv
sleftv * leftv
Definition
structs.h:53
Generated on
for My Project by
doxygen 1.17.0
for
Singular