1 | /* emacs edit mode for this file is -*- C++ -*- */ |
---|

2 | |
---|

3 | /** |
---|

4 | * @file cf_random.h |
---|

5 | * |
---|

6 | * generate random integers, random elements of finite fields |
---|

7 | **/ |
---|

8 | |
---|

9 | #ifndef INCL_CF_RANDOM_H |
---|

10 | #define INCL_CF_RANDOM_H |
---|

11 | |
---|

12 | // #include "config.h" |
---|

13 | |
---|

14 | #include "canonicalform.h" |
---|

15 | |
---|

16 | /*BEGINPUBLIC*/ |
---|

17 | |
---|

18 | /** |
---|

19 | * virtual class for random element generation |
---|

20 | **/ |
---|

21 | class CFRandom { |
---|

22 | public: |
---|

23 | virtual ~CFRandom() {} |
---|

24 | virtual CanonicalForm generate() const { return 0; } |
---|

25 | virtual CFRandom * clone() const { return new CFRandom(); } |
---|

26 | }; |
---|

27 | |
---|

28 | /** |
---|

29 | * generate random elements in GF |
---|

30 | **/ |
---|

31 | class GFRandom : public CFRandom |
---|

32 | { |
---|

33 | public: |
---|

34 | GFRandom() {}; |
---|

35 | ~GFRandom() {} |
---|

36 | CanonicalForm generate() const; |
---|

37 | CFRandom * clone() const; |
---|

38 | }; |
---|

39 | |
---|

40 | /** |
---|

41 | * generate random elements in F_p |
---|

42 | **/ |
---|

43 | class FFRandom : public CFRandom |
---|

44 | { |
---|

45 | public: |
---|

46 | FFRandom() {} |
---|

47 | ~FFRandom() {} |
---|

48 | CanonicalForm generate() const; |
---|

49 | CFRandom * clone() const; |
---|

50 | }; |
---|

51 | |
---|

52 | /** |
---|

53 | * generate random integers |
---|

54 | **/ |
---|

55 | class IntRandom : public CFRandom |
---|

56 | { |
---|

57 | private: |
---|

58 | int max; |
---|

59 | public: |
---|

60 | IntRandom(); |
---|

61 | IntRandom( int m ); |
---|

62 | ~IntRandom(); |
---|

63 | CanonicalForm generate() const; |
---|

64 | CFRandom * clone() const; |
---|

65 | }; |
---|

66 | |
---|

67 | /** |
---|

68 | * generate random elements in F_p(alpha) |
---|

69 | **/ |
---|

70 | class AlgExtRandomF : public CFRandom { |
---|

71 | private: |
---|

72 | Variable algext; |
---|

73 | CFRandom * gen; |
---|

74 | int n; |
---|

75 | AlgExtRandomF(); |
---|

76 | AlgExtRandomF( const Variable & v, CFRandom * g, int nn ); |
---|

77 | AlgExtRandomF& operator= ( const AlgExtRandomF & ); |
---|

78 | public: |
---|

79 | AlgExtRandomF( const AlgExtRandomF & ); |
---|

80 | AlgExtRandomF( const Variable & v ); |
---|

81 | AlgExtRandomF( const Variable & v1, const Variable & v2 ); |
---|

82 | ~AlgExtRandomF(); |
---|

83 | CanonicalForm generate() const; |
---|

84 | CFRandom * clone() const; |
---|

85 | }; |
---|

86 | |
---|

87 | class CFRandomFactory { |
---|

88 | public: |
---|

89 | static CFRandom * generate(); |
---|

90 | }; |
---|

91 | |
---|

92 | /// random integers with abs less than n |
---|

93 | int factoryrandom( int n ); |
---|

94 | |
---|

95 | /// random seed initializer |
---|

96 | void FACTORY_PUBLIC factoryseed( int s ); |
---|

97 | |
---|

98 | /*ENDPUBLIC*/ |
---|

99 | |
---|

100 | #endif /* ! INCL_CF_RANDOM_H */ |
---|