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@#m%6}#m zC{&x98|WyQ7@ODD3LN0zkk&MH^o=a2?OL>W$B`mu~2NHo}wr-0|Nsi1A_nqLn1>ZLpnndLq0?4#KPtEAPI2>U!Y(B zLk_YeLmop4gC0Wxrf5#OVQ_MOZUImy5NJvQ2@*}n&3AE0DJ@B6U~s=UW8qb>IV2iU ukb&%og3XT1$5=Kt6fkaP=iui6`Wq%a zdI*IcBL*KzP;dmrTyJ*#iww}(HDL>eSQ2=!eqosp!z2qaej5%Gl^5;yji@cuU%g&* z8qFmt?wjUUe~^`a5ftOR8;lNgOGR;L?Osp}X7-mXOYZF;+*NVeci(-=(jri4JbI9N zxTn%6E4$e^jq*d^jJKzvV$gTr_eSwCruKp~-c`8@RicU$r$MFfE>9*K?T;;kyjtE`oWUP7o+RhkAEil_ ze#iJMcb3D*3@`)Czzbl&Ze7mO3wTz3L}q{)cwPo*e~_qzp2f=i?pbo5Kx&$Cz=H0dDp%s7snS=bwj(6ggo>h2&sgIqHM z%)ny?7EIHn^Z)bT@BfdJxWx=G1OF8RqQ32Kckz|%**f=fbk<7LZ>S{HuQGU_f`&ed gu`eCP%cxq=FUdgkELH~5gTg-ong*_zfoEml4o#|N>;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 zcmeHK&1(}u6o1pkx=k-DRw#Ixs}Ll$E%CUG=}`!*w1}0sn_Zic&Caqr=~_Zy!JB`E z-zVvxAc)>QdeVQxn{PfUDT$yWB4OU}-tW!Fo7wqob|w!1NP84*0=NL+ph~RO(aaIq zFLg$iOv?%)QFFxLLkSEXf|wa?8!Q8sf&YyG`R&$W7cwjfOntv$S!7|tL+t++W(g}q zv-z1UE!QrrTy$3JYqGeP>i7KtFMSb+QPB?ad#c8wI5d7Y5Q8)S4(G`aKM40(T=v}c zTRas3OXGYh^zeYC5ii?(lt#s&uje~pkr?#cE8RRk#?Wq%#`~;bAxoGzaaLvNxf|p0 zcJpR~?%dd#H0Ze1YBuQhR%d$Iu535z?ALj^3l>Xw&cWVWt;2{qj4pL*D5`Bhd%= z^!CZAn&Fq%9rEapW3$2ZGk?{OZtVgvV1D+_+5+swZox8O8Th*l$n$}sO7sj?8r9K( zMx_9VHEdRbzRV?L3^nK(tTbW|3elm6I+U0cgXnN5O` z=cj5o5Kp7EmI2Gac?Ons)s^@E-p}*@^Fg*|8L$j26a%Ez@jGqYlDS)FHYe{|iuwRm qiX2yIR3T{0b*vnD6>p#_!9FS-M9*NQ5nE8~9|1*!HI{*Y%D{KHY@1*J 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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 YQ@c!JF^7h$jmUp~a`9j3?=JKI0f$ko*Z=?k 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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 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.44.0