35   : mapping_changed_(true), compact_size_(0) {
    36   for (
int dir = 0; dir < kNumOffsetMaps; ++dir) {
    37     offset_plus_[dir] = 
nullptr;
    38     offset_minus_[dir] = 
nullptr;
    48   return feature_space_.
Index(f);
    64   feature_map_.
Merge(-1, map_feature);
    65   mapping_changed_ = 
true;
    75   mapping_changed_ = 
false;
    82   if (dir.
x() == 0.0f && dir.
y() == 0.0f)
    85   for (
int dir = 0; dir < kNumOffsetMaps; ++dir) {
    86     delete [] offset_plus_[dir];
    87     delete [] offset_minus_[dir];
    91   for (
int dir = 1; dir <= kNumOffsetMaps; ++dir) {
    93       int offset_index = ComputeOffsetFeature(i, dir);
    94       offset_plus_[dir - 1][i] = offset_index;
    95       offset_index = ComputeOffsetFeature(i, -dir);
    96       offset_minus_[dir - 1][i] = offset_index;
   114   if (dir > 0 && dir <= kNumOffsetMaps)
   115     return offset_plus_[dir - 1][index_feature];
   116   else if (dir < 0 && -dir <= kNumOffsetMaps)
   117     return offset_minus_[-dir - 1][index_feature];
   119     return index_feature;
   126 #ifdef EXPERIMENT_ON  // This code is commented out as SampleIterator and   134   feature_map_.
Init(feature_space_.
Size(), 
false);
   135   int total_samples = 0;
   142     int num_features = features.
size();
   143     for (
int f = 0; f < num_features; ++f)
   144       feature_map_.
SetMap(features[f], 
true);
   147   feature_map_.
Setup();
   149   mapping_changed_ = 
true;
   151   tprintf(
"%d non-zero features found in %d samples\n",
   152           compact_size_, total_samples);
   153   return compact_size_;
   160   if (mapping_changed_) {
   166     mapping_changed_ = 
false;
   168   return compact_size_;
   174   for (
int i = 0; i < map_features.
size(); ++i) {
   180 void IntFeatureMap::Clear() {
   181   for (
int dir = 0; dir < kNumOffsetMaps; ++dir) {
   182     delete [] offset_plus_[dir];
   183     delete [] offset_minus_[dir];
   184     offset_plus_[dir] = 
nullptr;
   185     offset_minus_[dir] = 
nullptr;
   201 int IntFeatureMap::ComputeOffsetFeature(
int index_feature, 
int dir)
 const {
   205     return index_feature;
   206   } 
else if (dir == 1 || dir == -1) {
   208     FCOORD rotation90(0.0f, 1.0f);
   209     feature_dir.
rotate(rotation90);
   212       double x_pos = f.
X + feature_dir.
x() * (m * dir);
   213       double y_pos = f.
Y + feature_dir.
y() * (m * dir);
   216       if (x >= 0 && x <= UINT8_MAX && y >= 0 && y <= UINT8_MAX) {
   222         if (offset_index != index_feature && offset_index >= 0)
   228   } 
else if (dir == 2 || dir == -2) {
   231       int theta = f.
Theta + m * dir / 2;
   237       if (offset_index != index_feature && offset_index >= 0)
 FCOORD FeatureDirection(uint8_t theta)
const IntFeatureSpace & feature_space() const
int FindNZFeatureMapping(SampleIterator *it)
void DeleteMapFeature(int map_feature)
int CompactToSparse(int compact_index) const
void SetMap(int sparse_index, bool mapped)
void rotate(const FCOORD vec)
bool IsMapFeatureDeleted(int map_feature) const
void Init(const IntFeatureSpace &feature_space)
int MapIndexFeature(int index_feature) const
void MapSampleFeatures(const IntFeatureMap &feature_map)
int FinalizeMapping(SampleIterator *it)
bool Merge(int compact_index1, int compact_index2)
int IntCastRounded(double x)
void DebugMapFeatures(const GenericVector< int > &map_features) const
DLLSYM void tprintf(const char *format,...)
INT_FEATURE_STRUCT InverseIndexFeature(int index_feature) const
bool IsCompactDeleted(int index) const
int Index(const INT_FEATURE_STRUCT &f) const
INT_FEATURE_STRUCT InverseMapFeature(int map_feature) const
virtual int SparseToCompact(int sparse_index) const
int MapFeature(const INT_FEATURE_STRUCT &f) const
const TrainingSample & GetSample() const
int IndexFeature(const INT_FEATURE_STRUCT &f) const
void IndexAndSortFeatures(const INT_FEATURE_STRUCT *features, int num_features, GenericVector< int > *sorted_features) const
INT_FEATURE_STRUCT PositionFromIndex(int index) const
void Init(int size, bool all_mapped)
int OffsetFeature(int index_feature, int dir) const