1. Си / Говнокод #12533

    +139

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    for( i=0; i<MAX_CHANNELS; i++ )
      {
        ht->ht_Voices[i].vc_Delta=1;
        ht->ht_Voices[i].vc_OverrideTranspose=1000;  // 1.5
        ht->ht_Voices[i].vc_SamplePos=ht->ht_Voices[i].vc_Track=ht->ht_Voices[i].vc_Transpose=ht->ht_Voices[i].vc_NextTrack = ht->ht_Voices[i].vc_NextTranspose = 0;
        ht->ht_Voices[i].vc_ADSRVolume=ht->ht_Voices[i].vc_InstrPeriod=ht->ht_Voices[i].vc_TrackPeriod=ht->ht_Voices[i].vc_VibratoPeriod=ht->ht_Voices[i].vc_NoteMaxVolume=ht->ht_Voices[i].vc_PerfSubVolume=ht->ht_Voices[i].vc_TrackMasterVolume=0;
        ht->ht_Voices[i].vc_NewWaveform=ht->ht_Voices[i].vc_Waveform=ht->ht_Voices[i].vc_PlantSquare=ht->ht_Voices[i].vc_PlantPeriod=ht->ht_Voices[i].vc_IgnoreSquare=0;
        ht->ht_Voices[i].vc_TrackOn=ht->ht_Voices[i].vc_FixedNote=ht->ht_Voices[i].vc_VolumeSlideUp=ht->ht_Voices[i].vc_VolumeSlideDown=ht->ht_Voices[i].vc_HardCut=ht->ht_Voices[i].vc_HardCutRelease=ht->ht_Voices[i].vc_HardCutReleaseF=0;
        ht->ht_Voices[i].vc_PeriodSlideSpeed=ht->ht_Voices[i].vc_PeriodSlidePeriod=ht->ht_Voices[i].vc_PeriodSlideLimit=ht->ht_Voices[i].vc_PeriodSlideOn=ht->ht_Voices[i].vc_PeriodSlideWithLimit=0;
        ht->ht_Voices[i].vc_PeriodPerfSlideSpeed=ht->ht_Voices[i].vc_PeriodPerfSlidePeriod=ht->ht_Voices[i].vc_PeriodPerfSlideOn=ht->ht_Voices[i].vc_VibratoDelay=ht->ht_Voices[i].vc_VibratoCurrent=ht->ht_Voices[i].vc_VibratoDepth=ht->ht_Voices[i].vc_VibratoSpeed=0;
        ht->ht_Voices[i].vc_SquareOn=ht->ht_Voices[i].vc_SquareInit=ht->ht_Voices[i].vc_SquareLowerLimit=ht->ht_Voices[i].vc_SquareUpperLimit=ht->ht_Voices[i].vc_SquarePos=ht->ht_Voices[i].vc_SquareSign=ht->ht_Voices[i].vc_SquareSlidingIn=ht->ht_Voices[i].vc_SquareReverse=0;
        ht->ht_Voices[i].vc_FilterOn=ht->ht_Voices[i].vc_FilterInit=ht->ht_Voices[i].vc_FilterLowerLimit=ht->ht_Voices[i].vc_FilterUpperLimit=ht->ht_Voices[i].vc_FilterPos=ht->ht_Voices[i].vc_FilterSign=ht->ht_Voices[i].vc_FilterSpeed=ht->ht_Voices[i].vc_FilterSlidingIn=ht->ht_Voices[i].vc_IgnoreFilter=0;
        ht->ht_Voices[i].vc_PerfCurrent=ht->ht_Voices[i].vc_PerfSpeed=ht->ht_Voices[i].vc_WaveLength=ht->ht_Voices[i].vc_NoteDelayOn=ht->ht_Voices[i].vc_NoteCutOn=0;
        ht->ht_Voices[i].vc_AudioPeriod=ht->ht_Voices[i].vc_AudioVolume=ht->ht_Voices[i].vc_VoiceVolume=ht->ht_Voices[i].vc_VoicePeriod=ht->ht_Voices[i].vc_VoiceNum=ht->ht_Voices[i].vc_WNRandom=0;
        ht->ht_Voices[i].vc_SquareWait=ht->ht_Voices[i].vc_FilterWait=ht->ht_Voices[i].vc_PerfWait=ht->ht_Voices[i].vc_NoteDelayWait=ht->ht_Voices[i].vc_NoteCutWait=0;
        ht->ht_Voices[i].vc_PerfList=0;
        ht->ht_Voices[i].vc_RingSamplePos=ht->ht_Voices[i].vc_RingDelta=ht->ht_Voices[i].vc_RingPlantPeriod=ht->ht_Voices[i].vc_RingAudioPeriod=ht->ht_Voices[i].vc_RingNewWaveform=ht->ht_Voices[i].vc_RingWaveform=ht->ht_Voices[i].vc_RingFixedPeriod=ht->ht_Voices[i].vc_RingBasePeriod=0;
    
        ht->ht_Voices[i].vc_RingMixSource = NULL;
        ht->ht_Voices[i].vc_RingAudioSource = NULL;
    
        memset(&ht->ht_Voices[i].vc_SquareTempBuffer,0,0x80);
        memset(&ht->ht_Voices[i].vc_ADSR,0,sizeof(struct hvl_envelope));
        memset(&ht->ht_Voices[i].vc_VoiceBuffer,0,0x281);
        memset(&ht->ht_Voices[i].vc_RingVoiceBuffer,0,0x281);
      }

    Щито оно делает?

    Запостил: Govnocoder#0xFF, 03 Февраля 2013

    Комментарии (12) RSS

    • хм, рискну предположить что раз человек знает про memset, то все "это Ж-Ж-Ж неспроста", хотя с другой стороны адский быдлокод
      Ответить
      • Просто мемсетом обнулить здесь нельзя, хотя можно было бы упростить. Здесь ненулевые указатели, котолрые нельзя изменять.
        Ответить
        • memset(&ht->ht_Voices[i].vc_SquareTempBuffer,0,0x80);
          memset(&ht->ht_Voices[i].vc_ADSR,0,sizeof(struct hvl_envelope));
          memset(&ht->ht_Voices[i].vc_VoiceBuffer,0,0x281);
          memset(&ht->ht_Voices[i].vc_RingVoiceBuffer,0,0x281);

          я думаю это массивы
          Ответить
          • Так и есть:
            struct hvl_voice       ht_Voices[MAX_CHANNELS];
            Ответить
          • Похоже, это отсюда
            https://github.com/kode54/foo_input_hvl/blob/master/hvl_replay.h

            Там в заголовке видно, что внутри есть указатели, и просто так написать memset нельзя. Другой вопрос, что и этот код выглядит странно (помимо говна с заполнением нулями и нулевой читаемостью), ибо указатели просто обнуляются, а память не освобождается.
            Ответить
            • точно, указатели намешаны, да и название функции говорит само за себя: hvl_reset_some_stuff, то есть обнуление каких то строго определенных полей, я бы в таком случае оставил все как есть, просто развернул бы всю эту содомию в более опрятный вид
              Ответить
              • В С довольно просто предсказать положение структур в памяти, возможно стоит сгрупировать все часто обнуляемые переменные вначале структуры, а длину области вынести в #define.
                Ответить
                • главное не забыть этот самый #define изменять при изменение структуры
                  Ответить
                • Проще занулять целиком и потом заполнять ненулевые поля. С WINAPI так часто делают. Ну и в таком случае не нужен макрос.
                  Ответить
                • да ваще не надо обнулять тут ничего memsetами, обнуляется(сбрасывается в нужное состояние) лишь часть полей,причем каких угодно. Чтобы было видно какие лучше их всех присваиваниями сбросить
                  Ответить
    • Там, кстати, интересного много
      https://github.com/kode54/foo_input_hvl/blob/master/hvl_replay.c
      Этот код из функции на 256й строке
      Ответить

    Добавить комментарий