In the following C++ code, what is M(M) doing and what is the underlying concept? Any directions will be very helpful:
sha256_message_schedule_gadget<FieldT>::sha256_message_schedule_gadget(
protoboard<FieldT> &pb,
const pb_variable_array<FieldT> &M,
const pb_variable_array<FieldT> &packed_W,
const std::string &annotation_prefix) : gadget<FieldT>(pb, annotation_prefix),
M(M),
packed_W(packed_W)
{
//define something
}