Commit 3a757e76 authored by Dominik Charousset's avatar Dominik Charousset

Apply coding conventions to fixed_stack example

parent 75f8b39d
...@@ -42,58 +42,49 @@ The following example illustrates a more advanced state-based actor that impleme ...@@ -42,58 +42,49 @@ The following example illustrates a more advanced state-based actor that impleme
\clearpage \clearpage
\begin{lstlisting} \begin{lstlisting}
class fixed_stack : public sb_actor<fixed_stack> { class fixed_stack : public sb_actor<fixed_stack> {
public:
friend class sb_actor<fixed_stack>; fixed_stack(size_t max) : max_size(max) {
assert(max_size > 0);
full = (
on(atom("push"), arg_match) >> [=](int) { /* discard */ },
on(atom("pop")) >> [=]() -> tuple<atom_value, int> {
auto result = data.back();
data.pop_back();
if (data.empty()) become(empty);
else become(filled);
return {atom("ok"), result};
}
);
filled = (
on(atom("push"), arg_match) >> [=](int what) {
data.push_back(what);
if (data.size() == max_size) become(full);
},
on(atom("pop")) >> [=]() -> tuple<atom_value, int> {
auto result = data.back();
data.pop_back();
if (data.empty()) become(empty);
return {atom("ok"), result};
}
);
empty = (
on(atom("push"), arg_match) >> [=](int what) {
data.push_back(what);
if (data.size() == max_size) become(full);
else become(filled);
},
on(atom("pop")) >> [=] {
return atom("failure");
}
);
}
private:
size_t max_size; size_t max_size;
vector<int> data; vector<int> data;
behavior full; behavior full;
behavior filled; behavior filled;
behavior empty; behavior empty;
behavior& init_state = empty; behavior& init_state = empty;
public:
fixed_stack(size_t max) : max_size(max) {
assert(max_size > 0);
full = (
on(atom("push"), arg_match) >> [=](int) { /* discard */ },
on(atom("pop")) >> [=]() -> tuple<atom_value, int> {
auto result = data.back();
data.pop_back();
if (data.empty()) become(empty);
else become(filled);
return {atom("ok"), result};
}
);
filled = (
on(atom("push"), arg_match) >> [=](int what) {
data.push_back(what);
if (data.size() == max_size) become(full);
},
on(atom("pop")) >> [=]() -> tuple<atom_value, int> {
auto result = data.back();
data.pop_back();
if (data.empty()) become(empty);
return {atom("ok"), result};
}
);
empty = (
on(atom("push"), arg_match) >> [=](int what) {
data.push_back(what);
if (data.size() == max_size) become(full);
else become(filled);
},
on(atom("pop")) >> [=] {
return atom("failure");
}
);
}
}; };
\end{lstlisting} \end{lstlisting}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment