00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef ADAPTIVE_H
00019 #define ADAPTIVE_H
00020
00024 #include "oldlist.h"
00025 #include "intproto.h"
00026 #include <stdio.h>
00027
00028 typedef struct
00029 {
00030 uinT16 ProtoId;
00031 uinT16 dummy;
00032 PROTO_STRUCT Proto;
00033 }
00034
00035
00036 TEMP_PROTO_STRUCT;
00037 typedef TEMP_PROTO_STRUCT *TEMP_PROTO;
00038
00039 typedef struct
00040 {
00041 uinT8 NumTimesSeen;
00042 uinT8 ProtoVectorSize;
00043 PROTO_ID MaxProtoId;
00044 LIST ContextsSeen;
00045 BIT_VECTOR Protos;
00046 } TEMP_CONFIG_STRUCT;
00047 typedef TEMP_CONFIG_STRUCT *TEMP_CONFIG;
00048
00049 typedef UNICHAR_ID *PERM_CONFIG;
00050
00051 typedef union
00052 {
00053 TEMP_CONFIG Temp;
00054 PERM_CONFIG Perm;
00055 } ADAPTED_CONFIG;
00056
00057 typedef struct
00058 {
00059 uinT8 NumPermConfigs;
00060 uinT8 dummy[3];
00061 BIT_VECTOR PermProtos;
00062 BIT_VECTOR PermConfigs;
00063 LIST TempProtos;
00064 ADAPTED_CONFIG Config[MAX_NUM_CONFIGS];
00065 } ADAPT_CLASS_STRUCT;
00066 typedef ADAPT_CLASS_STRUCT *ADAPT_CLASS;
00067
00068 typedef struct
00069 {
00070 INT_TEMPLATES Templates;
00071 int NumNonEmptyClasses;
00072 uinT8 NumPermClasses;
00073 uinT8 dummy[3];
00074 ADAPT_CLASS Class[MAX_NUM_CLASSES];
00075 } ADAPT_TEMPLATES_STRUCT;
00076 typedef ADAPT_TEMPLATES_STRUCT *ADAPT_TEMPLATES;
00077
00081 #define NumNonEmptyClassesIn(Template) ((Template)->NumNonEmptyClasses)
00082
00083 #define IsEmptyAdaptedClass(Class) ((Class)->NumPermConfigs == 0 && \
00084 (Class)->TempProtos == NIL)
00085
00086 #define ConfigIsPermanent(Class,ConfigId) \
00087 (test_bit ((Class)->PermConfigs, ConfigId))
00088
00089 #define MakeConfigPermanent(Class,ConfigId) \
00090 (SET_BIT ((Class)->PermConfigs, ConfigId))
00091
00092 #define MakeProtoPermanent(Class,ProtoId) \
00093 (SET_BIT ((Class)->PermProtos, ProtoId))
00094
00095 #define TempConfigFor(Class,ConfigId) \
00096 ((Class)->Config[ConfigId].Temp)
00097
00098 #define PermConfigFor(Class,ConfigId) \
00099 ((Class)->Config[ConfigId].Perm)
00100
00101 #define IncreaseConfidence(TempConfig) \
00102 ((TempConfig)->NumTimesSeen++)
00103
00104 void AddAdaptedClass(ADAPT_TEMPLATES Templates,
00105 ADAPT_CLASS Class,
00106 CLASS_ID ClassId);
00107
00108 void FreeTempProto(void *arg);
00109
00110 void FreeTempConfig(TEMP_CONFIG Config);
00111
00112 ADAPT_CLASS NewAdaptedClass();
00113
00114 void free_adapted_class(ADAPT_CLASS adapt_class);
00115
00116 void free_adapted_templates(ADAPT_TEMPLATES templates);
00117
00118 TEMP_CONFIG NewTempConfig(int MaxProtoId);
00119
00120 TEMP_PROTO NewTempProto();
00121
00122 ADAPT_CLASS ReadAdaptedClass(FILE *File);
00123
00124 PERM_CONFIG ReadPermConfig(FILE *File);
00125
00126 TEMP_CONFIG ReadTempConfig(FILE *File);
00127
00128 void WriteAdaptedClass(FILE *File, ADAPT_CLASS Class, int NumConfigs);
00129
00130 void WritePermConfig(FILE *File, PERM_CONFIG Config);
00131
00132 void WriteTempConfig(FILE *File, TEMP_CONFIG Config);
00133
00134 #endif