Skip to content

Commit 401bffc

Browse files
authored
Code generator files for Swift 4/5 and Java 8
cgSwift.cstl and cgJava8.cstl are the main CSTL files for code generating Swift and Java. Place these & auxiliary CSTL files in a subdirectory cg of your tool directory. The default CSTL file used should be named cg.cstl. Ocl.swift and Ocl.java are the OCL libraries assumed by these generators.
1 parent 3921b2f commit 401bffc

File tree

8 files changed

+1011
-14
lines changed

8 files changed

+1011
-14
lines changed

Ocl.java

Lines changed: 86 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1+
package com.example.app6;
2+
13

24
/******************************
3-
* Copyright (c) 2003,2019 Kevin Lano
5+
* Copyright (c) 2003,2020 Kevin Lano
46
* This program and the accompanying materials are made available under the
57
* terms of the Eclipse Public License 2.0 which is available at
68
* http://www.eclipse.org/legal/epl-2.0
@@ -178,7 +180,42 @@ public static <T> ArrayList<T> initialiseSequence(T ... args)
178180
{ result.add(args[i]); }
179181
return result;
180182
}
183+
184+
public static <T> copySet(Collection<T> s)
185+
{ HashSet<T> result = new HashSet<T>();
186+
result.addAll(s);
187+
return result;
188+
}
189+
190+
public static <T> copySequence(Collection<T> s)
191+
{ ArrayList<T> result = new ArrayList<T>();
192+
result.addAll(s);
193+
return result;
194+
}
195+
196+
public static <T extends Comparable> T min(Collection<T> s)
197+
{ ArrayList<T> slist = new ArrayList<T>();
198+
slist.addAll(s);
199+
T result = slist.get(0);
200+
for (int i = 1; i < slist.size(); i++)
201+
{ T val = slist.get(i);
202+
if (val.compareTo(result) < 0)
203+
{ result = val; }
204+
}
205+
return result;
206+
}
181207

208+
public static <T extends Comparable> T max(Collection<T> s)
209+
{ ArrayList<T> slist = new ArrayList<T>();
210+
slist.addAll(s);
211+
T result = slist.get(0);
212+
for (int i = 1; i < slist.size(); i++)
213+
{ T val = slist.get(i);
214+
if (0 < val.compareTo(result))
215+
{ result = val; }
216+
}
217+
return result;
218+
}
182219

183220

184221
public static <T> HashSet<T> addSet(HashSet<T> s, T x)
@@ -492,7 +529,7 @@ static <T> ArrayList<T> mergeSort(final ArrayList<T> a, java.util.Map<T,Comparab
492529
}
493530

494531

495-
public static ArrayList<Integer> integerSubrange(int i, int j)
532+
public static ArrayList<Integer> integerSubrange(int i, double j)
496533
{ ArrayList<Integer> tmp = new ArrayList<Integer>();
497534
for (int k = i; k <= j; k++)
498535
{ tmp.add(new Integer(k)); }
@@ -906,5 +943,51 @@ public static <D,R> Map<D,R> addMap(Map<D,R> m, D key, R value)
906943
{ m.put(key,value);
907944
return m;
908945
}
909-
946+
947+
public static ArrayList<String> tokeniseCSV(String line)
948+
{ StringBuffer buff = new StringBuffer();
949+
int x = 0;
950+
int len = line.length();
951+
boolean instring = false;
952+
ArrayList<String> res = new ArrayList<String>();
953+
while (x < len)
954+
{ char chr = line.charAt(x);
955+
x++;
956+
if (chr == ',')
957+
{ if (instring) { buff.append(chr); }
958+
else
959+
{ res.add(buff.toString().trim());
960+
buff = new StringBuffer();
961+
}
962+
}
963+
else if ('"' == chr)
964+
{ if (instring) { instring = false; }
965+
else { instring = true; }
966+
}
967+
else
968+
{ buff.append(chr); }
969+
}
970+
res.add(buff.toString().trim());
971+
return res;
972+
}
973+
974+
public static ArrayList<String> parseCSVtable(String rows)
975+
{ StringBuffer buff = new StringBuffer();
976+
int x = 0;
977+
int len = rows.length();
978+
boolean instring = false;
979+
ArrayList<String> res = new ArrayList<String>();
980+
while (x < len)
981+
{ char chr = rows.charAt(x);
982+
x++;
983+
if (chr == '\n')
984+
{ res.add(buff.toString().trim());
985+
buff = new StringBuffer();
986+
}
987+
else
988+
{ buff.append(chr); }
989+
}
990+
res.add(buff.toString().trim());
991+
return res;
992+
}
910993
}

Ocl.swift

Lines changed: 40 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -13,17 +13,6 @@ import Glibc
1313

1414
class Ocl
1515
{
16-
static func displayString(s: String)
17-
{ print(s) }
18-
19-
static func displayint(s: Int)
20-
{ print(String(s)) }
21-
22-
static func displaylong(s: Int)
23-
{ print(String(s)) }
24-
25-
static func displaydouble(s: Double)
26-
{ print(String(s)) }
2716

2817
static func includingSet<T>(s : Set<T>, x : T) -> Set<T>
2918
{ var result : Set<T> = Set<T>()
@@ -39,6 +28,18 @@ class Ocl
3928
return result
4029
}
4130

31+
static func copySet<T>(s : Set<T>) -> Set<T>
32+
{ var result : Set<T> = Set<T>()
33+
result.formUnion(s)
34+
return result
35+
}
36+
37+
static func copySequence<T>(s : [T]) -> [T]
38+
{ var result : [T] = [T]()
39+
result = result + s
40+
return result
41+
}
42+
4243
static func prepend<T>(s : [T], x : T) -> [T]
4344
{ var result : [T] = [T]()
4445
result = result + s
@@ -624,6 +625,17 @@ class Ocl
624625
return ""
625626
}
626627

628+
static func indexOf(str: String, ch: String) -> Int
629+
{ var count = 0
630+
for index in str.indices
631+
{ let c : Character = str[index]
632+
count = count + 1
633+
if (String(c) == ch)
634+
{ return count }
635+
}
636+
return 0
637+
}
638+
627639
static func stringSubrange(str : String, st : Int, en : Int) -> String
628640
{ var result : [Character] = [Character]()
629641
var count : Int = 0
@@ -696,6 +708,23 @@ class Ocl
696708
return String(rev)
697709
}
698710

711+
static func toLineSequence(str: String) -> [String]
712+
{ var result : [String] = [String]()
713+
var buffer : String = ""
714+
715+
for index in str.indices
716+
{ let c : Character = str[index]
717+
if "\n" == String(c)
718+
{ result.append(buffer)
719+
buffer = String()
720+
}
721+
else
722+
{ buffer = buffer + String(c) }
723+
}
724+
result.append(buffer)
725+
return result
726+
}
727+
699728
/* Only for Swift 5+
700729
static func before(str: String, sep: String) -> String
701730
{ if let ind = str.firstIndex(of: sep)

0 commit comments

Comments
 (0)