From 4cf337e4061067d9230147d847e73367049d04b6 Mon Sep 17 00:00:00 2001 From: acevest Date: Tue, 23 Jun 2015 17:39:17 +0800 Subject: [PATCH] ... --- learn/swift/.DS_Store => .DS_Store | Bin 6148 -> 6148 bytes learn/.DS_Store | Bin 0 -> 6148 bytes learn/AppleSwift/.DS_Store | Bin 0 -> 6148 bytes .../AppleSwift.xcodeproj/project.pbxproj | 243 ++++++++++++++++++ .../contents.xcworkspacedata | 2 +- .../xcshareddata/AppleSwift.xccheckout} | 8 +- .../UserInterfaceState.xcuserstate | Bin 0 -> 32382 bytes .../xcschemes/AppleSwift.xcscheme | 88 +++++++ .../xcschemes/xcschememanagement.plist | 22 ++ learn/AppleSwift/AppleSwift/main.swift | 240 +++++++++++++++++ .../contents.xcplayground | 7 - .../UserInterfaceState.xcuserstate | Bin 7303 -> 0 bytes .../MyPlayground.playground/section-1.swift | 68 ----- .../timeline.xctimeline | 6 - lib/RingBuffer.cpp | 184 +++++++++++++ tools/comm/countc.c | 1 + 16 files changed, 783 insertions(+), 86 deletions(-) rename learn/swift/.DS_Store => .DS_Store (82%) create mode 100644 learn/.DS_Store create mode 100644 learn/AppleSwift/.DS_Store create mode 100644 learn/AppleSwift/AppleSwift.xcodeproj/project.pbxproj rename learn/{swift/MyPlayground.playground/playground.xcworkspace => AppleSwift/AppleSwift.xcodeproj/project.xcworkspace}/contents.xcworkspacedata (70%) rename learn/{swift/MyPlayground.playground/playground.xcworkspace/xcshareddata/MyPlayground.xccheckout => AppleSwift/AppleSwift.xcodeproj/project.xcworkspace/xcshareddata/AppleSwift.xccheckout} (87%) create mode 100644 learn/AppleSwift/AppleSwift.xcodeproj/project.xcworkspace/xcuserdata/Ace.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 learn/AppleSwift/AppleSwift.xcodeproj/xcuserdata/Ace.xcuserdatad/xcschemes/AppleSwift.xcscheme create mode 100644 learn/AppleSwift/AppleSwift.xcodeproj/xcuserdata/Ace.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 learn/AppleSwift/AppleSwift/main.swift delete mode 100644 learn/swift/MyPlayground.playground/contents.xcplayground delete mode 100644 learn/swift/MyPlayground.playground/playground.xcworkspace/xcuserdata/Ace.xcuserdatad/UserInterfaceState.xcuserstate delete mode 100644 learn/swift/MyPlayground.playground/section-1.swift delete mode 100644 learn/swift/MyPlayground.playground/timeline.xctimeline create mode 100644 lib/RingBuffer.cpp diff --git a/learn/swift/.DS_Store b/.DS_Store similarity index 82% rename from learn/swift/.DS_Store rename to .DS_Store index 0af6509e8bbda9106a7fcb0fe74feb24d9cbab14..2c3105d4c15de905e8e096c03661b1f8bccfafbc 100644 GIT binary patch delta 381 zcmZoMXfc=|#>B)qu~2NHo}w@l0|Nsi1A_nqLtavOaY0f}e$wWPj4K%@8;G#fvoho` zq%tHj6d@!T7#Myg735?Vmlzn_WMpDyVP#|I;N;>4K>B`mu~2NHo}wr-0|Nsi1A_nqLn1>ZLpnndLq0?4#KPtEAPI2>UxrGC z0EQf7NrpUz6b3zp0!-1Ibi?4}{M-TtFwm4F-GtnH7nhXMl4J%3_lq+YUIm*&q9Y12 vkR4I5*^&7e%f^NR#?9;;{2WY-9Ge}PzcWwf7qR33na;?-z_d9)WD7F@zCk-# diff --git a/learn/.DS_Store b/learn/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..8cc4f85903cfbd84fb87df2c454dd31e83e83bb6 GIT binary patch literal 6148 zcmeI0%}T>S5XWa~)wEtBDhOVB6?&*&)T6ESC=?;ehfkM z9efmTGP_$TtsVuH`Gqi>kN+lQ%Fg@?09ft1YXBwy7@%S%2VX+hX`djY&rn1;hX)p< zAm9v=iMyHK2<0vh6^I}Le>8ti8b^*FIsowQM81fVQt1sdQ`za6StFO9qs^SppIGfM zwGun&##Os>B#(saIeJ{TllE|Y5QhHe*mfGiOIzmRZWtuC2)xdS^tdSkH%zNxH*n)) zJzrC}NxNk()jM8Kcxl}ZyoQK{BYcru7&+Qn=5oKkS=ufZw$?WW#X`SaE)@%#8|A^k zd@_uc)ve0@VKlh9zPY`-e|UU;Q5iwhnOPXi(Cc>}r)PBnKMc;*51(Ne=C7fbJ!9^# zy*R@#KMt)A1>NH8=y<83Tsjbx1wer8@MV+_kbZ!qbWBo;Bn70AjLJQrmZG*8C@l%y zC*^=j4yfdxy&7usf%?g)9SV}8A-$3V%BM37GtQJcVN(6ygKzym!!Z9C%+{=0RTkZ^ kp;}Az^i*G_5;M1& literal 0 HcmV?d00001 diff --git a/learn/AppleSwift/.DS_Store b/learn/AppleSwift/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..4bc26328c535f6f33ec9b1b0560567f4d3733931 GIT binary patch literal 6148 zcmeI0Pixdb7{;G>yVi7jiCCfFWv{{_Tidc8+jTt(3y~JFvL>6@9m!_GCfit+g@QLf zhW}5}k06NNJ$llw;Z5F|*|Kc6pn}lK{6csqf1a6SCYd)+08n!nt^qCp2RfE3m%Xx#}-3qpmB1Js?{su*s2C)nP{0!1qWO=>*jYU`Iqn$6dK2liU|c zG?tqHVv!#@OT2X4)zN69e!EuP zytO{ARY#3Ry;j{=Z;Z$8N5{E-V{`l7gLM4j<*V0k-oAVP>9ZaUA~PyiXGZ7CS)Fs> z4U$+U`+DNT%DfK5O*}&v5+Nd_7(n7_yuapkWk1#J9Dm0jX#29&3Ws?Y`1;}bv8v&> z+wIHnueE7!`kH^tbdlxaVjg>E`QqM!#bWtK@cd9UDQ?TeBOTS$LC_X}fb!%Lv=2~z zfTg_6QjRPIaY;q(9>_?^SPW8@gwIoQkd}kA{3KVCF&|`FCgV_u9S!TX9Hd&eSS+(F z=p8QS|GPNT|644U{}?K_yjD{s-T82?<$U_s9Oe{0??Zqo>7RwGlbT3NIob~ai{+f~ E3%G2XU;qFB literal 0 HcmV?d00001 diff --git a/learn/AppleSwift/AppleSwift.xcodeproj/project.pbxproj b/learn/AppleSwift/AppleSwift.xcodeproj/project.pbxproj new file mode 100644 index 0000000..79dc39c --- /dev/null +++ b/learn/AppleSwift/AppleSwift.xcodeproj/project.pbxproj @@ -0,0 +1,243 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 5063B2A61B390AAF009C5821 /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5063B2A51B390AAF009C5821 /* main.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 5063B2A01B390AAF009C5821 /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = /usr/share/man/man1/; + dstSubfolderSpec = 0; + files = ( + ); + runOnlyForDeploymentPostprocessing = 1; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 5063B2A21B390AAF009C5821 /* AppleSwift */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = AppleSwift; sourceTree = BUILT_PRODUCTS_DIR; }; + 5063B2A51B390AAF009C5821 /* main.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = main.swift; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 5063B29F1B390AAF009C5821 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 5063B2991B390AAF009C5821 = { + isa = PBXGroup; + children = ( + 5063B2A41B390AAF009C5821 /* AppleSwift */, + 5063B2A31B390AAF009C5821 /* Products */, + ); + sourceTree = ""; + }; + 5063B2A31B390AAF009C5821 /* Products */ = { + isa = PBXGroup; + children = ( + 5063B2A21B390AAF009C5821 /* AppleSwift */, + ); + name = Products; + sourceTree = ""; + }; + 5063B2A41B390AAF009C5821 /* AppleSwift */ = { + isa = PBXGroup; + children = ( + 5063B2A51B390AAF009C5821 /* main.swift */, + ); + path = AppleSwift; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 5063B2A11B390AAF009C5821 /* AppleSwift */ = { + isa = PBXNativeTarget; + buildConfigurationList = 5063B2A91B390AAF009C5821 /* Build configuration list for PBXNativeTarget "AppleSwift" */; + buildPhases = ( + 5063B29E1B390AAF009C5821 /* Sources */, + 5063B29F1B390AAF009C5821 /* Frameworks */, + 5063B2A01B390AAF009C5821 /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = AppleSwift; + productName = AppleSwift; + productReference = 5063B2A21B390AAF009C5821 /* AppleSwift */; + productType = "com.apple.product-type.tool"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 5063B29A1B390AAF009C5821 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0630; + ORGANIZATIONNAME = Ace; + TargetAttributes = { + 5063B2A11B390AAF009C5821 = { + CreatedOnToolsVersion = 6.3.2; + }; + }; + }; + buildConfigurationList = 5063B29D1B390AAF009C5821 /* Build configuration list for PBXProject "AppleSwift" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = 5063B2991B390AAF009C5821; + productRefGroup = 5063B2A31B390AAF009C5821 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 5063B2A11B390AAF009C5821 /* AppleSwift */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXSourcesBuildPhase section */ + 5063B29E1B390AAF009C5821 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 5063B2A61B390AAF009C5821 /* main.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 5063B2A71B390AAF009C5821 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.10; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 5063B2A81B390AAF009C5821 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.10; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + }; + name = Release; + }; + 5063B2AA1B390AAF009C5821 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 5063B2AB1B390AAF009C5821 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 5063B29D1B390AAF009C5821 /* Build configuration list for PBXProject "AppleSwift" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 5063B2A71B390AAF009C5821 /* Debug */, + 5063B2A81B390AAF009C5821 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 5063B2A91B390AAF009C5821 /* Build configuration list for PBXNativeTarget "AppleSwift" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 5063B2AA1B390AAF009C5821 /* Debug */, + 5063B2AB1B390AAF009C5821 /* Release */, + ); + defaultConfigurationIsVisible = 0; + }; +/* End XCConfigurationList section */ + }; + rootObject = 5063B29A1B390AAF009C5821 /* Project object */; +} diff --git a/learn/swift/MyPlayground.playground/playground.xcworkspace/contents.xcworkspacedata b/learn/AppleSwift/AppleSwift.xcodeproj/project.xcworkspace/contents.xcworkspacedata similarity index 70% rename from learn/swift/MyPlayground.playground/playground.xcworkspace/contents.xcworkspacedata rename to learn/AppleSwift/AppleSwift.xcodeproj/project.xcworkspace/contents.xcworkspacedata index 919434a..5e84e35 100644 --- a/learn/swift/MyPlayground.playground/playground.xcworkspace/contents.xcworkspacedata +++ b/learn/AppleSwift/AppleSwift.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -2,6 +2,6 @@ + location = "self:AppleSwift.xcodeproj"> diff --git a/learn/swift/MyPlayground.playground/playground.xcworkspace/xcshareddata/MyPlayground.xccheckout b/learn/AppleSwift/AppleSwift.xcodeproj/project.xcworkspace/xcshareddata/AppleSwift.xccheckout similarity index 87% rename from learn/swift/MyPlayground.playground/playground.xcworkspace/xcshareddata/MyPlayground.xccheckout rename to learn/AppleSwift/AppleSwift.xcodeproj/project.xcworkspace/xcshareddata/AppleSwift.xccheckout index 51108a5..e196f85 100644 --- a/learn/swift/MyPlayground.playground/playground.xcworkspace/xcshareddata/MyPlayground.xccheckout +++ b/learn/AppleSwift/AppleSwift.xcodeproj/project.xcworkspace/xcshareddata/AppleSwift.xccheckout @@ -5,20 +5,20 @@ IDESourceControlProjectFavoriteDictionaryKey IDESourceControlProjectIdentifier - 1330DDA2-1B99-4E60-9F3A-B7DE1D7ECB22 + C6698B6B-E176-4266-9A99-7EA7B71954A4 IDESourceControlProjectName - MyPlayground + project IDESourceControlProjectOriginsDictionary BA634633803B1A00DDD2BCDEF5C645E5844F56E6 https://github.com/acevest/acecode.git IDESourceControlProjectPath - learn/swift/MyPlayground.playground + learn/AppleSwift/AppleSwift.xcodeproj/project.xcworkspace IDESourceControlProjectRelativeInstallPathDictionary BA634633803B1A00DDD2BCDEF5C645E5844F56E6 - ../../.. + ../../../.. IDESourceControlProjectURL https://github.com/acevest/acecode.git diff --git a/learn/AppleSwift/AppleSwift.xcodeproj/project.xcworkspace/xcuserdata/Ace.xcuserdatad/UserInterfaceState.xcuserstate b/learn/AppleSwift/AppleSwift.xcodeproj/project.xcworkspace/xcuserdata/Ace.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..596ab3f15cad417e021ed5875f0af1ba60dc5c5f GIT binary patch literal 32382 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 OH%cy5cf>y)>;D0VQLWej literal 0 HcmV?d00001 diff --git a/learn/AppleSwift/AppleSwift.xcodeproj/xcuserdata/Ace.xcuserdatad/xcschemes/AppleSwift.xcscheme b/learn/AppleSwift/AppleSwift.xcodeproj/xcuserdata/Ace.xcuserdatad/xcschemes/AppleSwift.xcscheme new file mode 100644 index 0000000..8bc289c --- /dev/null +++ b/learn/AppleSwift/AppleSwift.xcodeproj/xcuserdata/Ace.xcuserdatad/xcschemes/AppleSwift.xcscheme @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/learn/AppleSwift/AppleSwift.xcodeproj/xcuserdata/Ace.xcuserdatad/xcschemes/xcschememanagement.plist b/learn/AppleSwift/AppleSwift.xcodeproj/xcuserdata/Ace.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..15e61c0 --- /dev/null +++ b/learn/AppleSwift/AppleSwift.xcodeproj/xcuserdata/Ace.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,22 @@ + + + + + SchemeUserState + + AppleSwift.xcscheme + + orderHint + 0 + + + SuppressBuildableAutocreation + + 5063B2A11B390AAF009C5821 + + primary + + + + + diff --git a/learn/AppleSwift/AppleSwift/main.swift b/learn/AppleSwift/AppleSwift/main.swift new file mode 100644 index 0000000..da38bb1 --- /dev/null +++ b/learn/AppleSwift/AppleSwift/main.swift @@ -0,0 +1,240 @@ +// +// main.swift +// AppleSwift +// +// Created by Ace on 15/6/23. +// Copyright (c) 2015年 Ace. All rights reserved. +// + +import Foundation + + +let Constant = 0x1234 // let 声明常量 +var Variable = 0xAFEC // var 声明变量 +var VarInt = 8421 +var VarFloat = 3.1415926 +var VarDouble:Double = 2.71828182846 //如果初始类型信息不足,可以在变量后加":类型" +var VarF:Float = 0.1314 +var str:String = "Hello, World!" + + +let ss = str + " " + String(Variable) // 类型必需显示转换 + + +// 可以通过在客串中加\()的方式把值转换成字符串 +let Int2Str = "translate int in string with \(VarInt) \(ss)" +println(Int2Str) + + +// 数组 +var arrayList = ["apple", "microsoft", "xx", "google", "tencent", "twitter"] +arrayList[2] = "amazon" +println(arrayList) + +// 字典 +var dict = [ + "apple" : "USA", + "tencnet" : "CN" +] +println(dict) +println(dict["apple"]) +println(dict["apple"]!) + +// 创建空数组和空字典 +var EmptyArray = [String]() +var EmptyDict = [String:String]() +// or +var EmptArrayWithNoType = [] +var EmptDictWithNoType = [:] + +for cp in arrayList { + println(cp) +} + + + +var OptionalVar:String? = "hehe" +//OptionalVar = nil +if let name = OptionalVar { + println("Hello \(OptionalVar)") +} +else +{ + println("sssssss") +} + + +let word = "ff" + +switch word { +case "dd" : + println("unknown") +case "ff" : + println("fallthrough") + fallthrough // 会走到下一个case +case "red apple", "blue apple" : + println("red") +default: // 必须在最后。。。 + println("default"); +} + + +// 闭区间 +for i in 0...3 { + print(i) +} +println("") +// 开区间 +for i in 0..<3 { + print(i) +} + + +for i in 0..=[] +for i in 1...5 { + IntArray.append(i) +} +IntArray += [0, -1, -2, -3, -4] +IntArray[0] = 1024 +IntArray[1..<4]=[999, 888, 777] +IntArray.insert(1, atIndex: 0) +IntArray.removeAtIndex(5) +IntArray.removeLast() +println(IntArray) +for (index, value) in enumerate(IntArray) { + println("Item \(index+1): \(value)") +} + + +var StringArray = [String]() +StringArray.append("dd") +StringArray = [] + +var DoubleArray = [Double](count:3, repeatedValue:9.9) +for i in 1...5 { + DoubleArray.append(Double(i)*1.1) +} +println(DoubleArray) + + +// Set +var SetA=Set() +var SetB:Set=[] +var SetC: Set = ["a", "b", "b"] + +SetA.insert(1) +SetA.insert(2) +SetA.insert(1) +if SetA.contains(1) { + println(SetA) +} + +for genre in sorted(SetA) { + println("\(genre)") +} + +let oddSet:Set = [1, 3, 5, 7, 9] +let evenSet:Set = [0, 2, 4, 6, 8] +println(sorted(oddSet.intersect(evenSet))) // 交 +println(sorted(oddSet.union(evenSet))) // 并 +println(oddSet.hashValue) + + +// Dict +var airports: [String:String] = ["TYO" : "Tokyo", "DUB":"Dublin"] +airports["LHR"] = "London" +airports["APL"] = "Apple Internation" +if let oldValue = airports.updateValue("Dublin Internation", forKey: "DUB") { + println("The old value for DIB was \(oldValue)") +} + +for (k, v) in airports { + println("\(k): \(v)") +} + +for k in airports.keys { + println("Airport Code: \(k)") +} + +for v in airports.values { + println("Airport Name: \(v)") +} + +println(airports) +airports["APL"] = nil // Delete +println(airports) + +if let removedValue = airports.removeValueForKey("DUB") { + println("The removed airport's name is \(removedValue)") +} else { + println("The airports dictionary does not contain a value for DUB") +} + +// create an empty dict +var emptyDict = Dictionary() +emptyDict[16] = "sixteen" +emptyDict = [:] + + + + + + + diff --git a/learn/swift/MyPlayground.playground/contents.xcplayground b/learn/swift/MyPlayground.playground/contents.xcplayground deleted file mode 100644 index 8e39341..0000000 --- a/learn/swift/MyPlayground.playground/contents.xcplayground +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/learn/swift/MyPlayground.playground/playground.xcworkspace/xcuserdata/Ace.xcuserdatad/UserInterfaceState.xcuserstate b/learn/swift/MyPlayground.playground/playground.xcworkspace/xcuserdata/Ace.xcuserdatad/UserInterfaceState.xcuserstate deleted file mode 100644 index 0624362111c67e7a0e26f04385fd652ca5b82dd9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7303 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 z z)GGM|P?GyA!YLAot@U)gFhtt|sQKI$^_F zjQ7FfPVxYG5EtW(D$0($FCY(-gTQr?1LP50f=fHeqvQ}?k2he(ba!1%cg3nJr>;h| zaGcl}kd;=S6bo=_(HiX%6qWfjIT9!HD0vod!eyAz9p}`d)!G#z%5#hyR~>l?mv=y4 zOo=$sb%`D&`xPkyFrtTFC9gsH=FRH$Nb}-N@|Mc|Ph8nS-o{mb6^3`!F#MamhpX|n z?l62vPRE)23HcP);H{W3IR=eVi{vXJenypkMZS&W`Hp;#YjK@A73~omq`r`lBFH7R zXxig(yg!nkV|n`pH((zvN58}3P70LZ?RaO*II5?na}`lDwctj)12ZP17R`J2T)C8? zjz1jbaU*WRjMSpQ=D3qdv=^jz(jK%Yc3@{G?M;($3*Hq8U9?PNIM>6b#J#PE5wfb4 zP^(vI4XGgLe>&0?INFzHK>FP@mG-0kX&N0s({U@_joWZL?!bHQrWezJbP%M`EJ(w9 zaTnf?$+)NM)sUKwIW1zqC;1|^t)e~^KX+YPswA(Xg+JgH$-|4~}h)dD&kxDHx~_jS-qaA&kO zwCPYBu|9hAGFqe+wTET9M_`WnP9Zw|sGE+8i5rc(F(b-+IUO6<5wwy{h@G5>d%I88 z(AxNuljxLaDblIs>SuZm+1(J&ssM=&G)4wqWg7GJJ&=-fEId2~KLiie^~V|S@Ir5?8EfBVww zuU4GBvU;r4F8MUjAcbD0i|LZu2$VnqX6OlhVIT~F;cyvwk{l(kl2ha~`HFl`&XBX@ zSMob0R7ZQ!Vp>T(RHR-i(MBrMS+to3Dbj^>5nV#Br#I4NbU9r?SJ55x8Tzgcbet|z zH(EDC=h69fLETk4MK@bFN7td-rQ4(1r+Y~Euo?(Pxq+zsS zqG5`m#n5J0WLRQYZMe;_&TzZo4#OtHeTH3z-G;q}UyTVyyU}6fjXjLLjLF6ejs1)R zjrqnA#!<$x#u{V2ak6o$(Ps=BuQo0;-eg>ETwz>g++^%9ZZU2(er^2KWHT`)*2I~d zCc)Ih)XS7%8feNiWt(zMgH1zB!%T&yF($uhr|E6eZ{}X+A?8YRy?Kgxnt6t~(d;+3 zo0plFn^%}unb(+aGp{pmFmE*9Y2IVrXMWJU-+aJ)(0s^z*!+a~Df2(fC(Iw2f45{? zN-S4d7FkwXHd*eo9JV}RdCKw+%Mr`7mgg-mT3)ieZ27?Qk>#}IQ_JU;FD+kNzO{UB zIb%7Spi4+jxHzFWp(3FnVR6Fxg!>W>CA^aGxz%K~SgqDXtKFJz&9xR--PT5H*xG7s zv$k93TIX9=S+`mrupY6#Z~f5vvGo({XVx#QXRJS1f3#7X-PYUI-!{OOVH;@6w_R=< zZs+WIJv9)b^e2jP0!Lr$k+1W@29Av_vWKroLWEL_Tm@UlR%y#A; zW>>Uoc-W-!R|V!EUn;uwP=Yx3}6C*l)LQ zx9_t*Xy0!?U_WR-WIt+u&i;b^nEkl@75hp1Df?;rH};=dmgQI{E3iG-UTi8mf~{wf zy@6fEE@xM;+t~-%$Joc&C)uajXV{n6m)R5StL*FSo9uh+PY#2_?nrj@cMNc3I0ia0 z9YY-jj^U0=9U~n@jv0=*jyoOu9Zx%sIG%O9;5g9ZoliSYI6rh*Tm`Orm(SJcl3jjRz}4bf=(@$V!nM-1+I6>UpX(vl z!>)s_L$1TF7hEs8j=7GzPPyK7z32MS^|9*{*BRFjuCuP61e1^;*aW-a5O^V3NEP}E z1B47=pim%;5H1sng;By7;c}ru@CZ#pt8le2Pq;?7PFO4~6>bpL3Y&$U!d~G4;UVFm la7Z{TJRzJEP9>!z4Ns~_nwV4{*#SUl*Y{HGJNikQ{9h9^_G175 diff --git a/learn/swift/MyPlayground.playground/section-1.swift b/learn/swift/MyPlayground.playground/section-1.swift deleted file mode 100644 index bb6b9ec..0000000 --- a/learn/swift/MyPlayground.playground/section-1.swift +++ /dev/null @@ -1,68 +0,0 @@ -// Playground - noun: a place where people can play - -import UIKit - -var str = "Hello, playground" -println(str) - -let Constant = 0x1234 // let 声明常量 -var Variable = 0xAFEC // var 声明变量 -var VarInt = 8421 -var VarFloat = 3.1415926 -var VarDouble:Double = 2.71828182846 //如果初始类型信息不足,可以在变量后加":类型" -var VarF:Float = 0.1314 - - -let s = str + String(Variable) // 类型必需显示转换 - - -// 可以通过在客串中加\()的方式把值转换成字符串 -let Int2Str = "translate int in string with \(VarInt) \(str)" -println(Int2Str) - - -// 数组 -var arrayList = ["apple", "microsoft", "xx", "google", "tencent", "twitter"] -arrayList[2] = "amazon" -println(arrayList) - -// 字典 -var dict = [ - "apple" : "USA", - "tencnet" : "CN" -] -println(dict) - -// 创建空数组和空字典 -var EmptyArray = [String]() -var EmptyDict = [String:String]() -// or -var EmptArrayWithNoType = [] -var EmptDictWithNoType = [:] - -for cp in arrayList { - println(cp) -} - - - -var OptionalVar: String? = "hehe" -OptionalVar == nil -if let name = OptionalVar { - println("Hello \(OptionalVar)") -} -else -{ - println("sssssss") -} - - -let word = "red apple" - -//switch word { -//case "dd" : -//} - - - - diff --git a/learn/swift/MyPlayground.playground/timeline.xctimeline b/learn/swift/MyPlayground.playground/timeline.xctimeline deleted file mode 100644 index bf468af..0000000 --- a/learn/swift/MyPlayground.playground/timeline.xctimeline +++ /dev/null @@ -1,6 +0,0 @@ - - - - - diff --git a/lib/RingBuffer.cpp b/lib/RingBuffer.cpp new file mode 100644 index 0000000..ac000d0 --- /dev/null +++ b/lib/RingBuffer.cpp @@ -0,0 +1,184 @@ +/* + * ------------------------------------------------------------------------ + * File Name: RingBuffer.cpp + * Thu Jun 18 16:13:49 2015 + * Description: none + * ------------------------------------------------------------------------ + */ + +#include +#include + +class RingBuffer +{ +public: + RingBuffer(): buffer_(NULL), in_(0), out_(0), size_(0) {} + ~RingBuffer() {} + +public: + // Init - 初始化缓冲区 + // @buffer: 已经申请的用作缓冲区的内存指针 + // @size: 缓冲区的大小, 必须是2的整数次幂 + // + // 通过@buffer传入的内存, 可以是通过Alloc申请的, 也可以是外部自行分配的 + // 后者需要自行释放内存, 不适合通过Free释放 + int Init(unsigned char *buffer, unsigned int size) + { + if (!is_power_of_two(size)) + return -1; + + buffer_ = buffer; + size_ = size; + in_ = out_ = 0; + + return 0; + } + + // Alloc - 在堆上申请指定大小的缓冲区内存并初始化 + // @size: 缓冲区大小, 会向上调整到2的整数次幂 + // + // 通过Alloc申请的内存需要通过Free进行释放, 即Alloc和Free要配对使用 + int Alloc(unsigned int size) + { + unsigned char *buffer; + int ret; + + if (!is_power_of_two(size)) + size = roundup_power_of_two(size); + + buffer = new unsigned char[size]; + if (!buffer) + return -1; + + ret = Init(buffer, size); + if (ret != 0) + delete[] buffer; + + return 0; + } + + // Put - 向缓冲区拷贝指定长度的数据 + // @buffer: 拷贝到缓冲区的数据 + // @len: 数据长度 + // + // 从@buffer向缓冲区拷贝至多@len字节的数据, 具体拷贝长度依赖缓冲区的 + // 剩余空间大小, 实际拷贝长度通过返回值返回 + unsigned int Put(const unsigned char *buffer, unsigned int len) + { + unsigned int l; + + len = min(len, size_ - Len()); + + // 从buffer_的in_位置开始写入数据, 直到buffer_的结尾位置 + l = min(len, size_ - (in_ & (size_ - 1))); + memcpy(buffer_ + (in_ & (size_ - 1)), buffer, l); + + // 把剩余数据从buffer_的起始位置开始写入, 直到完成len字节写入 + memcpy(buffer_, buffer + l, len - l); + + in_ += len; + + return len; + } + + // Get - 从缓冲区中取出指定长度的数据 + // @buffer: 取出数据的拷贝内存 + // @len: 拷贝内存的长度 + // + // 向@buffer拷贝至多@len字节的数据, 实际拷贝长度通过返回值返回 + unsigned int Get(unsigned char *buffer, unsigned int len) + { + unsigned int l; + + len = min(len, Len()); + + // 从buffer_的out_位置开始读出数据, 直到buffer_的结束位置 + l = min(len, size_ - (out_ & (size_ - 1))); + memcpy(buffer, buffer_ + (out_ & (size_ - 1)), l); + + // 然后从buffer_的起始位置开始读出, 直到完成len字节读出 + memcpy(buffer + l, buffer_, len - l); + + out_ += len; + + return len; + } + + // Len - 返回缓冲区的数据长度 + unsigned int Len() + { + return in_ - out_; + } + + // Reset - 重置缓冲区, 即清空缓冲区数据 + void Reset() + { + in_ = out_ = 0; + } + + // Free - 释放缓冲区内存 + // 释放通过Alloc申请的缓冲区内存, 和Alloc配对使用 + void Free() + { + if (buffer_) + { + delete[] buffer_; + buffer_ = NULL; + } + } + +private: + template + T min(T a, T b) + { + return a > b ? b : a; + } + + bool is_power_of_two(unsigned int n) + { + return (n != 0 && ((n & (n - 1)) == 0)); + } + + unsigned int roundup_power_of_two(unsigned int n) + { + unsigned int fls = __builtin_clz(n); + return 1 << (sizeof(n) * 8 - fls); + } + +private: + unsigned char *buffer_; // 缓冲区指针 + unsigned int in_; // 写指针 + unsigned int out_; // 读指针 + unsigned int size_; // 缓冲区大小 +}; + +int main() +{ + RingBuffer rb; + rb.Alloc(7); + + unsigned char str[128] = {0}; + int n; + + str[0] = 'a'; + n = rb.Put(str, 1); + + str[1] = 'b'; + n = rb.Put(str, 2); + + str[2] = 'c'; + n = rb.Put(str, 3); + + str[3] = 'd'; + n = rb.Put(str, 4); + + str[4] = 'e'; + n = rb.Put(str, 5); + + n = rb.Get(str, 2); + n = rb.Get(str, 1); + + rb.Free(); + + return 0; +} diff --git a/tools/comm/countc.c b/tools/comm/countc.c index e71f771..1b978fc 100644 --- a/tools/comm/countc.c +++ b/tools/comm/countc.c @@ -91,6 +91,7 @@ void count_file(char *path) && !valid_type(path,"py") && !valid_type(path,"go") && !valid_type(path,"php") + && !valid_type(path,"swift") ) { #if 0 -- 2.55.0