5
5
#include < mp/config.h>
6
6
#include < mp/util.h>
7
7
8
- #include < boost/optional.hpp >
8
+ #include < algorithm >
9
9
#include < capnp/schema-parser.h>
10
10
#include < fstream>
11
11
#include < map>
12
12
#include < set>
13
13
#include < sstream>
14
+ #include < unistd.h>
14
15
#include < vector>
15
16
16
17
#define PROXY_BIN " mpgen"
@@ -329,8 +330,10 @@ void Generate(kj::StringPtr src_prefix,
329
330
330
331
struct Field
331
332
{
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 ;
334
337
int args = 0 ;
335
338
bool retval = false ;
336
339
bool optional = false ;
@@ -354,7 +357,13 @@ void Generate(kj::StringPtr src_prefix,
354
357
fields.emplace_back ();
355
358
}
356
359
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
+ }
358
367
359
368
if (!param && field_name == " result" ) {
360
369
field.retval = true ;
@@ -393,7 +402,7 @@ void Generate(kj::StringPtr src_prefix,
393
402
fields[field.second ].optional = true ;
394
403
}
395
404
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 ) {
397
406
fields[want_field->second ].skip = true ;
398
407
fields[field.second ].requested = true ;
399
408
}
@@ -416,12 +425,12 @@ void Generate(kj::StringPtr src_prefix,
416
425
for (const auto & field : fields) {
417
426
if (field.skip ) continue ;
418
427
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 ();
422
431
423
432
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" );
425
434
if (field.optional ) field_flags << " | FIELD_OPTIONAL" ;
426
435
if (field.requested ) field_flags << " | FIELD_REQUESTED" ;
427
436
if (BoxedType (field_type)) field_flags << " | FIELD_BOXED" ;
0 commit comments