Skip to content

Commit 138ad67

Browse files
vasildryanofsky
authored andcommitted
Change Field::(param and result) to not use boost
Fall back to the KISS boolean flag denoting whether the variable is set or not.
1 parent 5724a2c commit 138ad67

File tree

1 file changed

+18
-9
lines changed

1 file changed

+18
-9
lines changed

src/mp/gen.cpp

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,13 @@
55
#include <mp/config.h>
66
#include <mp/util.h>
77

8-
#include <boost/optional.hpp>
8+
#include <algorithm>
99
#include <capnp/schema-parser.h>
1010
#include <fstream>
1111
#include <map>
1212
#include <set>
1313
#include <sstream>
14+
#include <unistd.h>
1415
#include <vector>
1516

1617
#define PROXY_BIN "mpgen"
@@ -329,8 +330,10 @@ void Generate(kj::StringPtr src_prefix,
329330

330331
struct Field
331332
{
332-
boost::optional<::capnp::StructSchema::Field> param;
333-
boost::optional<::capnp::StructSchema::Field> result;
333+
::capnp::StructSchema::Field param;
334+
bool param_is_set = false;
335+
::capnp::StructSchema::Field result;
336+
bool result_is_set = false;
334337
int args = 0;
335338
bool retval = false;
336339
bool optional = false;
@@ -354,7 +357,13 @@ void Generate(kj::StringPtr src_prefix,
354357
fields.emplace_back();
355358
}
356359
auto& field = fields[inserted.first->second];
357-
(param ? field.param : field.result) = schema_field;
360+
if (param) {
361+
field.param = schema_field;
362+
field.param_is_set = true;
363+
} else {
364+
field.result = schema_field;
365+
field.result_is_set = true;
366+
}
358367

359368
if (!param && field_name == "result") {
360369
field.retval = true;
@@ -393,7 +402,7 @@ void Generate(kj::StringPtr src_prefix,
393402
fields[field.second].optional = true;
394403
}
395404
auto want_field = field_idx.find("want" + Cap(field.first));
396-
if (want_field != field_idx.end() && fields[want_field->second].param) {
405+
if (want_field != field_idx.end() && fields[want_field->second].param_is_set) {
397406
fields[want_field->second].skip = true;
398407
fields[field.second].requested = true;
399408
}
@@ -416,12 +425,12 @@ void Generate(kj::StringPtr src_prefix,
416425
for (const auto& field : fields) {
417426
if (field.skip) continue;
418427

419-
auto field_name = field.param ? field.param->getProto().getName() :
420-
field.result ? field.result->getProto().getName() : "";
421-
auto field_type = field.param ? field.param->getType() : field.result->getType();
428+
const auto& f = field.param_is_set ? field.param : field.result;
429+
auto field_name = f.getProto().getName();
430+
auto field_type = f.getType();
422431

423432
std::ostringstream field_flags;
424-
field_flags << (!field.param ? "FIELD_OUT" : field.result ? "FIELD_IN | FIELD_OUT" : "FIELD_IN");
433+
field_flags << (!field.param_is_set ? "FIELD_OUT" : field.result_is_set ? "FIELD_IN | FIELD_OUT" : "FIELD_IN");
425434
if (field.optional) field_flags << " | FIELD_OPTIONAL";
426435
if (field.requested) field_flags << " | FIELD_REQUESTED";
427436
if (BoxedType(field_type)) field_flags << " | FIELD_BOXED";

0 commit comments

Comments
 (0)