Clearmatics Libsnark  0.1
C++ library for zkSNARK proofs
Macros
gadgetMacros.hpp File Reference
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

#define CREATE_GADGET_BASE_CLASS(GadgetBase)
 
#define ADD_ELLIPSES_1(Type1, name1)   const Type1 &name1
 
#define ADD_ELLIPSES_2(Type1, name1, Type2, name2)   const Type1 &name1, const Type2 &name2
 
#define ADD_ELLIPSES_3(Type1, name1, Type2, name2, Type3, name3)   const Type1 &name1, const Type2 &name2, const Type3 &name3
 
#define ADD_ELLIPSES_4(Type1, name1, Type2, name2, Type3, name3, Type4, name4)
 
#define ADD_ELLIPSES_5( Type1, name1, Type2, name2, Type3, name3, Type4, name4, Type5, name5)
 
#define ADD_ELLIPSES_7( Type1, name1, Type2, name2, Type3, name3, Type4, name4, Type5, name5, Type6, name6, Type7, name7, Type8, name8, Type9, name9)
 
#define ADD_ELLIPSES_8( Type1, name1, Type2, name2, Type3, name3, Type4, name4, Type5, name5, Type6, name6, Type7, name7, Type8, name8)
 
#define ADD_ELLIPSES_9( Type1, name1, Type2, name2, Type3, name3, Type4, name4, Type5, name5, Type6, name6, Type7, name7, Type8, name8, Type9, name9)
 
#define CREATE_GADGET_FACTORY_CLASS_1(GadgetType, Type1, name1)
 
#define CREATE_GADGET_FACTORY_CLASS_2(GadgetType, Type1, name1, Type2, name2)
 
#define CREATE_GADGET_FACTORY_CLASS_3( GadgetType, Type1, name1, Type2, name2, Type3, name3)
 
#define CREATE_GADGET_FACTORY_CLASS_4( GadgetType, Type1, name1, Type2, name2, Type3, name3, Type4, name4)
 
#define CREATE_GADGET_FACTORY_CLASS_5( GadgetType, Type1, name1, Type2, name2, Type3, name3, Type4, name4, Type5, name5)
 
#define CREATE_GADGET_FACTORY_CLASS_7( GadgetType, Type1, name1, Type2, name2, Type3, name3, Type4, name4, Type5, name5, Type6, name6, Type7, name7)
 
#define CREATE_GADGET_FACTORY_CLASS_8( GadgetType, Type1, name1, Type2, name2, Type3, name3, Type4, name4, Type5, name5, Type6, name6, Type7, name7, Type8, name8)
 
#define CREATE_GADGET_FACTORY_CLASS_9( GadgetType, Type1, name1, Type2, name2, Type3, name3, Type4, name4, Type5, name5, Type6, name6, Type7, name7, Type8, name8, Type9, name9)
 

Detailed Description

Macros for quick construction of interface and factory classes for non field agnostic gadgets.

Author
This file is part of libsnark, developed by SCIPR Lab and contributors (see AUTHORS).

Definition in file gadgetMacros.hpp.

Macro Definition Documentation

◆ ADD_ELLIPSES_1

#define ADD_ELLIPSES_1 (   Type1,
  name1 
)    const Type1 &name1

Macro for creating gadget factory classes. For instance CREATE_GADGET_FACTORY_CLASS(AND_Gadget, 2, VariableArray, input, Variable, result); creates a class AND_Gadget with the method: GadgetPtr AND_Gadget::create(ProtoboardPtr pb, const VariableArray& input, const Variable& result) which will instantiate a field specific gadget depending on the Protoboard type. This macro implements the factory design pattern.

Definition at line 73 of file gadgetMacros.hpp.

◆ ADD_ELLIPSES_2

#define ADD_ELLIPSES_2 (   Type1,
  name1,
  Type2,
  name2 
)    const Type1 &name1, const Type2 &name2

Definition at line 75 of file gadgetMacros.hpp.

◆ ADD_ELLIPSES_3

#define ADD_ELLIPSES_3 (   Type1,
  name1,
  Type2,
  name2,
  Type3,
  name3 
)    const Type1 &name1, const Type2 &name2, const Type3 &name3

Definition at line 78 of file gadgetMacros.hpp.

◆ ADD_ELLIPSES_4

#define ADD_ELLIPSES_4 (   Type1,
  name1,
  Type2,
  name2,
  Type3,
  name3,
  Type4,
  name4 
)
Value:
const Type1 &name1, const Type2 &name2, const Type3 &name3, \
const Type4 &name4

Definition at line 81 of file gadgetMacros.hpp.

◆ ADD_ELLIPSES_5

#define ADD_ELLIPSES_5 (   Type1,
  name1,
  Type2,
  name2,
  Type3,
  name3,
  Type4,
  name4,
  Type5,
  name5 
)
Value:
const Type1 &name1, const Type2 &name2, const Type3 &name3, \
const Type4 &name4, const Type5 &name5

Definition at line 85 of file gadgetMacros.hpp.

◆ ADD_ELLIPSES_7

#define ADD_ELLIPSES_7 (   Type1,
  name1,
  Type2,
  name2,
  Type3,
  name3,
  Type4,
  name4,
  Type5,
  name5,
  Type6,
  name6,
  Type7,
  name7,
  Type8,
  name8,
  Type9,
  name9 
)
Value:
const Type1 &name1, const Type2 &name2, const Type3 &name3, \
const Type4 &name4, const Type5 &name5, const Type6 &name6, \
const Type7 &name7

Definition at line 90 of file gadgetMacros.hpp.

◆ ADD_ELLIPSES_8

#define ADD_ELLIPSES_8 (   Type1,
  name1,
  Type2,
  name2,
  Type3,
  name3,
  Type4,
  name4,
  Type5,
  name5,
  Type6,
  name6,
  Type7,
  name7,
  Type8,
  name8 
)
Value:
const Type1 &name1, const Type2 &name2, const Type3 &name3, \
const Type4 &name4, const Type5 &name5, const Type6 &name6, \
const Type7 &name7, const Type8 &name8

Definition at line 113 of file gadgetMacros.hpp.

◆ ADD_ELLIPSES_9

#define ADD_ELLIPSES_9 (   Type1,
  name1,
  Type2,
  name2,
  Type3,
  name3,
  Type4,
  name4,
  Type5,
  name5,
  Type6,
  name6,
  Type7,
  name7,
  Type8,
  name8,
  Type9,
  name9 
)
Value:
const Type1 &name1, const Type2 &name2, const Type3 &name3, \
const Type4 &name4, const Type5 &name5, const Type6 &name6, \
const Type7 &name7, const Type8 &name8, const Type9 &name9

Definition at line 134 of file gadgetMacros.hpp.

◆ CREATE_GADGET_BASE_CLASS

#define CREATE_GADGET_BASE_CLASS (   GadgetBase)
Value:
class GadgetBase : virtual public Gadget \
{ \
protected: \
GadgetBase(ProtoboardPtr pb) : Gadget(pb) {} \
\
public: \
virtual ~GadgetBase() = 0; \
\
private: \
virtual void init() = 0; \
DISALLOW_COPY_AND_ASSIGN(GadgetBase); \
};
  • The PP_NARG macro returns the number of arguments that have been Macro which creates Base classes for function specific gadgets. For instance CREATE_GADGET_BASE_CLASS(AND_GadgetBase) will create a base class which should be inherited by R1P_AND_Gadget and ANOTHER_FIELD_AND_Gadget. The Factory class which makes a field agnostic gadget will be created by the CREATE_GADGET_FACTORY_CLASS(AND_Gadget, ...) macro

Definition at line 51 of file gadgetMacros.hpp.

◆ CREATE_GADGET_FACTORY_CLASS_1

#define CREATE_GADGET_FACTORY_CLASS_1 (   GadgetType,
  Type1,
  name1 
)
Value:
class GadgetType \
{ \
public: \
static GadgetPtr create( \
ProtoboardPtr pb, ADD_ELLIPSES_1(Type1, name1)) \
{ \
GadgetPtr pGadget; \
if (pb->fieldType_ == R1P) { \
pGadget.reset(new R1P_##GadgetType(pb, name1)); \
} else { \
GADGETLIB_FATAL("Attempted to create gadget of undefined " \
"Protoboard type."); \
} \
pGadget->init(); \
return pGadget; \
} \
\
private: \
DISALLOW_CONSTRUCTION(GadgetType); \
DISALLOW_COPY_AND_ASSIGN(GadgetType); \
};

Definition at line 169 of file gadgetMacros.hpp.

◆ CREATE_GADGET_FACTORY_CLASS_2

#define CREATE_GADGET_FACTORY_CLASS_2 (   GadgetType,
  Type1,
  name1,
  Type2,
  name2 
)
Value:
class GadgetType \
{ \
public: \
static GadgetPtr create( \
ProtoboardPtr pb, ADD_ELLIPSES_2(Type1, name1, Type2, name2)) \
{ \
GadgetPtr pGadget; \
if (pb->fieldType_ == R1P) { \
pGadget.reset(new R1P_##GadgetType(pb, name1, name2)); \
} else { \
GADGETLIB_FATAL("Attempted to create gadget of undefined " \
"Protoboard type."); \
} \
pGadget->init(); \
return pGadget; \
} \
\
private: \
DISALLOW_CONSTRUCTION(GadgetType); \
DISALLOW_COPY_AND_ASSIGN(GadgetType); \
};

Definition at line 192 of file gadgetMacros.hpp.

◆ CREATE_GADGET_FACTORY_CLASS_3

#define CREATE_GADGET_FACTORY_CLASS_3 (   GadgetType,
  Type1,
  name1,
  Type2,
  name2,
  Type3,
  name3 
)
Value:
class GadgetType \
{ \
public: \
static GadgetPtr create( \
ADD_ELLIPSES_3(Type1, name1, Type2, name2, Type3, name3)) \
{ \
GadgetPtr pGadget; \
if (pb->fieldType_ == R1P) { \
pGadget.reset(new R1P_##GadgetType(pb, name1, name2, name3)); \
} else { \
GADGETLIB_FATAL("Attempted to create gadget of undefined " \
"Protoboard type."); \
} \
pGadget->init(); \
return pGadget; \
} \
\
private: \
DISALLOW_CONSTRUCTION(GadgetType); \
DISALLOW_COPY_AND_ASSIGN(GadgetType); \
};

Definition at line 215 of file gadgetMacros.hpp.

◆ CREATE_GADGET_FACTORY_CLASS_4

#define CREATE_GADGET_FACTORY_CLASS_4 (   GadgetType,
  Type1,
  name1,
  Type2,
  name2,
  Type3,
  name3,
  Type4,
  name4 
)
Value:
class GadgetType \
{ \
public: \
static GadgetPtr create( \
Type1, name1, Type2, name2, Type3, name3, Type4, name4)) \
{ \
GadgetPtr pGadget; \
if (pb->fieldType_ == R1P) { \
pGadget.reset( \
new R1P_##GadgetType(pb, name1, name2, name3, name4)); \
} else { \
GADGETLIB_FATAL("Attempted to create gadget of undefined " \
"Protoboard type."); \
} \
pGadget->init(); \
return pGadget; \
} \
\
private: \
DISALLOW_CONSTRUCTION(GadgetType); \
DISALLOW_COPY_AND_ASSIGN(GadgetType); \
};

Definition at line 240 of file gadgetMacros.hpp.

◆ CREATE_GADGET_FACTORY_CLASS_5

#define CREATE_GADGET_FACTORY_CLASS_5 (   GadgetType,
  Type1,
  name1,
  Type2,
  name2,
  Type3,
  name3,
  Type4,
  name4,
  Type5,
  name5 
)

Definition at line 267 of file gadgetMacros.hpp.

◆ CREATE_GADGET_FACTORY_CLASS_7

#define CREATE_GADGET_FACTORY_CLASS_7 (   GadgetType,
  Type1,
  name1,
  Type2,
  name2,
  Type3,
  name3,
  Type4,
  name4,
  Type5,
  name5,
  Type6,
  name6,
  Type7,
  name7 
)

Definition at line 313 of file gadgetMacros.hpp.

◆ CREATE_GADGET_FACTORY_CLASS_8

#define CREATE_GADGET_FACTORY_CLASS_8 (   GadgetType,
  Type1,
  name1,
  Type2,
  name2,
  Type3,
  name3,
  Type4,
  name4,
  Type5,
  name5,
  Type6,
  name6,
  Type7,
  name7,
  Type8,
  name8 
)

Definition at line 367 of file gadgetMacros.hpp.

◆ CREATE_GADGET_FACTORY_CLASS_9

#define CREATE_GADGET_FACTORY_CLASS_9 (   GadgetType,
  Type1,
  name1,
  Type2,
  name2,
  Type3,
  name3,
  Type4,
  name4,
  Type5,
  name5,
  Type6,
  name6,
  Type7,
  name7,
  Type8,
  name8,
  Type9,
  name9 
)

Definition at line 433 of file gadgetMacros.hpp.

ADD_ELLIPSES_1
#define ADD_ELLIPSES_1(Type1, name1)
Definition: gadgetMacros.hpp:73
ADD_ELLIPSES_2
#define ADD_ELLIPSES_2(Type1, name1, Type2, name2)
Definition: gadgetMacros.hpp:75
gadgetlib2::GadgetPtr
::std::shared_ptr< Gadget > GadgetPtr
Definition: gadget.hpp:119
gadgetlib2::ProtoboardPtr
::std::shared_ptr< Protoboard > ProtoboardPtr
Definition: variable.hpp:42
ADD_ELLIPSES_3
#define ADD_ELLIPSES_3(Type1, name1, Type2, name2, Type3, name3)
Definition: gadgetMacros.hpp:78
ADD_ELLIPSES_4
#define ADD_ELLIPSES_4(Type1, name1, Type2, name2, Type3, name3, Type4, name4)
Definition: gadgetMacros.hpp:81
gadgetlib2::R1P
@ R1P
Definition: variable.hpp:37