Skip to content

Commit

Permalink
kernel: convert pperm.c and trans.c to C++
Browse files Browse the repository at this point in the history
  • Loading branch information
fingolfin committed Dec 5, 2018
1 parent 67fb341 commit ccdc683
Show file tree
Hide file tree
Showing 8 changed files with 77 additions and 56 deletions.
6 changes: 4 additions & 2 deletions Makefile.rules
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ SOURCES += src/objset.c
SOURCES += src/opers.c
SOURCES += src/permutat.cc
SOURCES += src/plist.c
SOURCES += src/pperm.c
SOURCES += src/pperm.cc
SOURCES += src/precord.c
SOURCES += src/profile.c
SOURCES += src/range.c
Expand All @@ -99,7 +99,7 @@ SOURCES += src/sysfiles.c
SOURCES += src/sysmem.c
SOURCES += src/system.c
SOURCES += src/tietze.c
SOURCES += src/trans.c
SOURCES += src/trans.cc
SOURCES += src/vars.c
SOURCES += src/vec8bit.c
SOURCES += src/vecffe.c
Expand Down Expand Up @@ -338,6 +338,8 @@ DEPFLAGS = -MQ "$@" -MMD -MP -MF $(DEPFILE)
$(srcdir)/src/objfgelm.c:
$(srcdir)/src/objpcgel.c:
$(srcdir)/src/permutat.c:
$(srcdir)/src/pperm.c:
$(srcdir)/src/trans.c:

# Build rule for C++ source files
obj/%.lo: %.cc cnf/GAP-CXXFLAGS cnf/GAP-CPPFLAGS libtool
Expand Down
2 changes: 1 addition & 1 deletion src/collectors.cc
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ extern "C" {
#include "plist.h"
#include "stringobj.h"

}
} // extern "C"


/****************************************************************************
Expand Down
4 changes: 1 addition & 3 deletions src/compiled.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@

#ifdef __cplusplus
extern "C" {
#define GAP_IN_EXTERN_C
#endif

#include "ariths.h"
Expand Down Expand Up @@ -291,8 +290,7 @@ static inline Obj C_NORMALIZE_64BIT( Obj o) {
#endif

#ifdef __cplusplus
}
#undef GAP_IN_EXTERN_C
} // extern "C"
#endif

#endif // GAP_COMPILED_H
4 changes: 3 additions & 1 deletion src/objfgelm.cc
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,9 @@ extern "C" {
#ifdef HPCGAP
#include "hpc/guards.h"
#endif
}

} // extern "C"


// OverflowType<UIntN> is a type which is larger enough to detect
// overflow of multiplication of two IntN values. For 8 and 16 bit
Expand Down
2 changes: 1 addition & 1 deletion src/objpcgel.cc
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ extern "C" {
#include "modules.h"
#include "plist.h"

}
} // extern "C"


/****************************************************************************
Expand Down
2 changes: 1 addition & 1 deletion src/permutat.cc
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ extern "C" {
#include "sysfiles.h"
#include "trans.h"

}
} // extern "C"


#ifdef GAP_KERNEL_DEBUG
Expand Down
30 changes: 20 additions & 10 deletions src/pperm.c → src/pperm.cc
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@
*
*****************************************************************************/

extern "C" {

#include "pperm.h"

#include "ariths.h"
Expand All @@ -28,6 +30,8 @@
#include "plist.h"
#include "saveload.h"

} // extern "C"


#define MAX(a, b) (a < b ? b : a)
#define MIN(a, b) (a < b ? a : b)
Expand Down Expand Up @@ -6734,16 +6738,22 @@ static Int InitModuleState(void)
*F InitInfoPPerm() . . . . . . . . . . . . . . . table of init functions
*/
static StructInitInfo module = {
// init struct using C99 designated initializers; for a full list of
// fields, please refer to the definition of StructInitInfo
.type = MODULE_BUILTIN,
.name = "pperm",
.initKernel = InitKernel,
.initLibrary = InitLibrary,

.moduleStateSize = sizeof(PPermModuleState),
.moduleStateOffsetPtr = &PPermStateOffset,
.initModuleState = InitModuleState,
/* type = */ MODULE_BUILTIN,
/* name = */ "pperm",
/* revision_c = */ 0,
/* revision_h = */ 0,
/* version = */ 0,
/* crc = */ 0,
/* initKernel = */ InitKernel,
/* initLibrary = */ InitLibrary,
/* checkInit = */ 0,
/* preSave = */ 0,
/* postSave = */ 0,
/* postRestore = */ 0,
/* moduleStateSize = */ sizeof(PPermModuleState),
/* moduleStateOffsetPtr = */ &PPermStateOffset,
/* initModuleState = */ InitModuleState,
/* destroyModuleState = */ 0,
};

StructInitInfo * InitInfoPPerm(void)
Expand Down
83 changes: 46 additions & 37 deletions src/trans.c → src/trans.cc
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,8 @@
*
*****************************************************************************/

extern "C" {

#include "trans.h"

#include "ariths.h"
Expand All @@ -56,6 +58,9 @@
#include "plist.h"
#include "saveload.h"

} // extern "C"


#define MIN(a, b) (a < b ? a : b)
#define MAX(a, b) (a < b ? b : a)

Expand Down Expand Up @@ -857,7 +862,7 @@ Obj FuncFLAT_KERNEL_TRANS(Obj self, Obj f)

Obj FuncFLAT_KERNEL_TRANS_INT(Obj self, Obj f, Obj n)
{
Obj new, *ptnew;
Obj newObj, *ptnew;
const Obj *ptker;
UInt deg, m, i;

Expand All @@ -873,15 +878,14 @@ Obj FuncFLAT_KERNEL_TRANS_INT(Obj self, Obj f, Obj n)
return KER_TRANS(f);
}
else if (m == 0) {
new = NewEmptyPlist();
return new;
return NewEmptyPlist();
}
else {
new = NEW_PLIST(T_PLIST_CYC_NSORT, m);
SET_LEN_PLIST(new, m);
newObj = NEW_PLIST(T_PLIST_CYC_NSORT, m);
SET_LEN_PLIST(newObj, m);

ptker = CONST_ADDR_OBJ(KER_TRANS(f)) + 1;
ptnew = ADDR_OBJ(new) + 1;
ptnew = ADDR_OBJ(newObj) + 1;

// copy the kernel set up to minimum of m, deg
if (m < deg) {
Expand All @@ -900,7 +904,7 @@ Obj FuncFLAT_KERNEL_TRANS_INT(Obj self, Obj f, Obj n)
*ptnew++ = INTOBJ_INT(i + RANK_TRANS2(f));
}
}
return new;
return newObj;
}
}
else if (TNUM_OBJ(f) == T_TRANS4) {
Expand All @@ -913,15 +917,14 @@ Obj FuncFLAT_KERNEL_TRANS_INT(Obj self, Obj f, Obj n)
return KER_TRANS(f);
}
else if (m == 0) {
new = NewEmptyPlist();
return new;
return NewEmptyPlist();
}
else {
new = NEW_PLIST(T_PLIST_CYC_NSORT, m);
SET_LEN_PLIST(new, m);
newObj = NEW_PLIST(T_PLIST_CYC_NSORT, m);
SET_LEN_PLIST(newObj, m);

ptker = CONST_ADDR_OBJ(KER_TRANS(f)) + 1;
ptnew = ADDR_OBJ(new) + 1;
ptnew = ADDR_OBJ(newObj) + 1;

// copy the kernel set up to minimum of m, deg
if (m < deg) {
Expand All @@ -940,7 +943,7 @@ Obj FuncFLAT_KERNEL_TRANS_INT(Obj self, Obj f, Obj n)
*ptnew++ = INTOBJ_INT(i + RANK_TRANS4(f));
}
}
return new;
return newObj;
}
}
RequireTransformation("FLAT_KERNEL_TRANS_INT", f);
Expand Down Expand Up @@ -1094,7 +1097,7 @@ Obj FuncIMAGE_SET_TRANS(Obj self, Obj f)

Obj FuncIMAGE_SET_TRANS_INT(Obj self, Obj f, Obj n)
{
Obj im, new;
Obj im, newObj;
UInt deg, m, len, i, j, rank;
Obj * ptnew;
const Obj *ptim;
Expand All @@ -1112,11 +1115,10 @@ Obj FuncIMAGE_SET_TRANS_INT(Obj self, Obj f, Obj n)
return FuncIMAGE_SET_TRANS(self, f);
}
else if (m == 0) {
new = ImmutableEmptyPlist;
return new;
return ImmutableEmptyPlist;
}
else if (m < deg) {
new = NEW_PLIST_IMM(T_PLIST_CYC, m);
newObj = NEW_PLIST_IMM(T_PLIST_CYC, m);
pttmp = ResizeInitTmpTrans(deg);

if (TNUM_OBJ(f) == T_TRANS2) {
Expand All @@ -1126,7 +1128,7 @@ Obj FuncIMAGE_SET_TRANS_INT(Obj self, Obj f, Obj n)
j = ptf2[i];
if (pttmp[j] == 0) {
pttmp[j] = ++rank;
SET_ELM_PLIST(new, rank, INTOBJ_INT(j + 1));
SET_ELM_PLIST(newObj, rank, INTOBJ_INT(j + 1));
}
}
}
Expand All @@ -1137,35 +1139,35 @@ Obj FuncIMAGE_SET_TRANS_INT(Obj self, Obj f, Obj n)
j = ptf4[i];
if (pttmp[j] == 0) {
pttmp[j] = ++rank;
SET_ELM_PLIST(new, rank, INTOBJ_INT(j + 1));
SET_ELM_PLIST(newObj, rank, INTOBJ_INT(j + 1));
}
}
}
SHRINK_PLIST(new, (Int)rank);
SET_LEN_PLIST(new, (Int)rank);
SortPlistByRawObj(new);
RetypeBag(new, T_PLIST_CYC_SSORT + IMMUTABLE);
SHRINK_PLIST(newObj, (Int)rank);
SET_LEN_PLIST(newObj, (Int)rank);
SortPlistByRawObj(newObj);
RetypeBag(newObj, T_PLIST_CYC_SSORT + IMMUTABLE);
}
else {
// m > deg and so m is at least 1!
im = FuncIMAGE_SET_TRANS(self, f);
len = LEN_PLIST(im);
new = NEW_PLIST(T_PLIST_CYC_SSORT, m - deg + len);
SET_LEN_PLIST(new, m - deg + len);
newObj = NEW_PLIST(T_PLIST_CYC_SSORT, m - deg + len);
SET_LEN_PLIST(newObj, m - deg + len);

ptnew = ADDR_OBJ(new) + 1;
ptnew = ADDR_OBJ(newObj) + 1;
ptim = CONST_ADDR_OBJ(im) + 1;

// copy the image set
for (i = 0; i < len; i++) {
*ptnew++ = *ptim++;
}
// add new points
// add newObj points
for (i = deg + 1; i <= m; i++) {
*ptnew++ = INTOBJ_INT(i);
}
}
return new;
return newObj;
}

// Returns the image list [(1)f .. (n)f] of the transformation f.
Expand Down Expand Up @@ -5497,15 +5499,22 @@ static Int InitModuleState(void)
*F InitInfoTrans() . . . . . . . . . . . . . . . table of init functions
*/
static StructInitInfo module = {
// init struct using C99 designated initializers; for a full list of
// fields, please refer to the definition of StructInitInfo
.type = MODULE_BUILTIN,
.name = "trans",
.initKernel = InitKernel,
.initLibrary = InitLibrary,
.moduleStateSize = sizeof(TransModuleState),
.moduleStateOffsetPtr = &TransStateOffset,
.initModuleState = InitModuleState,
/* type = */ MODULE_BUILTIN,
/* name = */ "trans",
/* revision_c = */ 0,
/* revision_h = */ 0,
/* version = */ 0,
/* crc = */ 0,
/* initKernel = */ InitKernel,
/* initLibrary = */ InitLibrary,
/* checkInit = */ 0,
/* preSave = */ 0,
/* postSave = */ 0,
/* postRestore = */ 0,
/* moduleStateSize = */ sizeof(TransModuleState),
/* moduleStateOffsetPtr = */ &TransStateOffset,
/* initModuleState = */ InitModuleState,
/* destroyModuleState = */ 0,
};

StructInitInfo * InitInfoTrans(void)
Expand Down

0 comments on commit ccdc683

Please sign in to comment.