1. Список говнокодов пользователя enikey

    Всего: 4

  2. Java / Говнокод #8260

    +94

    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
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    /**
     * Interface for string cleaners. Defines method that takes a string to perform cleaning and returns
     * cleaned string.
     * 
     * @author Король Абстракций.
     * @version 1.0 29.04.2011
     *
     */
    public interface StringCleaner {
    	//---------------------------------------------------------------------------------------------
    	/**
    	 * Cleans given string. Returns cleaned string.
    	 * @param string String to clean
    	 * @return Cleaned string
    	 * @throws NullPointerException <code>If string == null</code>
    	 * @since 1.0
    	 */
    	public String clean(String string);
    	//---------------------------------------------------------------------------------------------
    }
    
    // Далее реализации.
    
    public abstract class SymbolStringCleaner implements StringCleaner { ... }
    public final class AllSymbolStringCleaner extends SymbolStringCleaner { ... }
    public final class RepeatedSymbolStringCleaner extends SymbolStringCleaner { ... }
    public class TrimStringCleaner extends SymbolStringCleaner { ... }
    public final class CombinedStringCleaner implements StringCleaner { ... }
    
    // Пример использования.
    
    public class StringCleanerFactory {
    	private static final char END_OF_LINE_SYMBOL = '\n';
    	
    	public static synchronized StringCleaner createCommonStringCleaner() {
    		char[] symbolsToExclude = new char[] {' ', END_OF_LINE_SYMBOL};
    		StringCleaner repeatedSymbolsCleaner = new RepeatedSymbolStringCleaner(symbolsToExclude);
    		StringCleaner trimCleaner = new TrimStringCleaner(symbolsToExclude, true, true);
    		
    		CombinedStringCleaner resultCleaner = new CombinedStringCleaner();
    		resultCleaner.add(repeatedSymbolsCleaner);
    		resultCleaner.add(trimCleaner);
    		return resultCleaner;
    	}
    }
    
    // В реале выходит что-то вроде
    
    return str.trim().replace(" \n", '');

    Очистка строк огнем инквизиции еше никогда не была настолько абстрактной.


    P.S.

    Я удалял этот StringCleaner API 3 раза, и каждый раз наши адепты стринг клинеров под любым
    предлогом поднимали это г***о из анналов ада (svn history). Последний раз я сдался и этот
    ёжик теперь живет с нами.

    enikey, 21 Октября 2011

    Комментарии (61)
  3. Java / Говнокод #7445

    +76

    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
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    84. 84
    85. 85
    86. 86
    87. 87
    88. 88
    89. 89
    90. 90
    91. 91
    public class ThreadPoolExecutor implements Executor {
    	private int maximumPoolSize; 	// ìàêñèìàëüíîå êîëè÷åñòâî ïîòîêîâ
    	private long keepAliveTime; 	// âðåìÿ îæèäàíèÿ íîâîé çàäà÷è
    	private Integer poolSize;			// êîëè÷åñòâî ñîçäàííûõ ïîòîêîâ
    	private Vector workQueue;			// î÷åðåäü çàäà÷
    	private Vector threadPool;			// ïóë ïîòîêîâ
    
    	public ThreadPoolExecutor(int maxPoolSize, long time) {
    		this.maximumPoolSize = maxPoolSize;
    		this.keepAliveTime = time;
    		this.poolSize = new Integer(0);
    		workQueue = new Vector();
    		threadPool = new Vector();
    		new Thread() {	
    			public void run() {
    				for (;;) {
    					try {
    						Thread.sleep(keepAliveTime);
    					} catch (InterruptedException e) {
    						System.out.println("interrupted");
    					}
    					interruptIfIdle();
    				}
    			}
    		}.start();
    	}
    
    	public void execute(Runnable task) {
    		if (task == null)
    			throw new NullPointerException();
    		workQueue.addElement(task);
    		for (;;) {
    			int status = addIfUnderMaximumPoolSize(task);
    			if (status > 0)
    				return;
    			if (status == 0) {
    				reject(task);
    				return;
    			}
    		}
    	}
    	
    	public void shutdown() {
    		if (threadPool.size() > 0) 
    			for (int i=0; i < threadPool.size(); i++) {
    				((Thread) threadPool.elementAt(i)).interrupt();
    			}
    	}
    	
    	public void reject(Runnable task) {
    		//
    	}
    	
    	private int addIfUnderMaximumPoolSize(Runnable task) {
    		Thread t = null;
    		int status = 0;
    		synchronized (poolSize) {
    			if (poolSize.intValue() < maximumPoolSize) {
    				Runnable next = (Runnable) workQueue.elementAt(0);
    				workQueue.removeElementAt(0);
    				if (next == task) {
    					status = 1;
    				} else
    					status = -1;
    				t = addThread(next);
    			}	
    		}
    		return status;
    	}
    	
    	private Thread addThread(Runnable task) {
    		Thread thread = new Thread(task);
    		threadPool.addElement(thread);
    		thread.run();
    		poolSize = new Integer(poolSize.intValue()+1);
    		return new Thread();
    	}
    		
    	private void interruptIfIdle() {
    		synchronized (threadPool) {
    			for (int i=0; i < threadPool.size(); i++) {
    				try {
    					((Thread) threadPool.elementAt(i)).interrupt();
    				} finally {
    					poolSize = new Integer(poolSize.intValue()-1);
    				}
    			}
    		}
    	}
    	
    }

    Junior пишет весьма упрощенный ThreadPoolExecutor для BlackBerry (сорри, не тот пост кинул в прошлый раз).

    enikey, 04 Августа 2011

    Комментарии (0)
  4. Java / Говнокод #7441

    +72

    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
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    package com.uva.concurrent;
    
    import com.uva.log.Log;
    import com.uva.log.Message;
    
    public class ThreadExecutor implements Executor {
    	private final String name;
    
    	public ThreadExecutor(String name) {
    		this.name = name;
    	}
    
    	public void execute(Runnable target) {
    		new Thread(target, name).start();
    	}
    	
    	/** Execute given runnable in separate thread. All exceptions will be caught.
    	 * @param runnable - runnable to execute. */
    	public void executeSilent(final Runnable runnable) {
    		new Thread() {	
    			public void run() {
    				try {
    					runnable.run();
    				} 
    				catch (RuntimeException e) {
    					Log.exception(name, Message.CRITICAL_ERROR, e);
    					throw e;
    				}
    			}
    		}.start();
    	}
    }

    Junior пишет весьма ThreadPoolExecutor для BlackBerry.

    enikey, 04 Августа 2011

    Комментарии (8)
  5. C++ / Говнокод #4162

    +156

    1. 1
    2. 2
    std::pair<std::vector<char>::const_iterator, unsigned int> parsedUnit = Utils::PackedUIntHelper::Unpack<unsigned char>(it);
    parsedUnit = Utils::PackedUIntHelper::Unpack<unsigned char>(parsedUnit.first);

    Представления потока данных итератором и чтение числа.

    enikey, 03 Сентября 2010

    Комментарии (2)