Skip to content

Commit

Permalink
Update data structure APIs (#51)
Browse files Browse the repository at this point in the history
* Update data structure APIs

* Update 'test' directory
  • Loading branch information
rvanasa authored Dec 20, 2024
1 parent 1399d53 commit f22d5ba
Show file tree
Hide file tree
Showing 13 changed files with 287 additions and 344 deletions.
20 changes: 12 additions & 8 deletions src/Array.mo
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,9 @@ import { nyi = todo } "Debug";

module {

public func init<T>(size : Nat, initValue : T) : [var T] = Prim.Array_init<T>(size, initValue);
public func new<T>() : [T] = [];

public func repeat<T>(size : Nat, initValue : T) : [var T] = Prim.Array_init<T>(size, initValue);

public func generate<T>(size : Nat, generator : Nat -> T) : [T] = Prim.Array_tabulate<T>(size, generator);

Expand All @@ -32,18 +34,22 @@ module {
todo()
};

public func sort<T>(array : [var T], compare : (T, T) -> Order.Order) {
public func sort<T>(array : [T], compare : (T, T) -> Order.Order) : [T] {
todo()
};

public func sortInPlace<T>(array : [T], compare : (T, T) -> Order.Order) : [T] {
public func sortInPlace<T>(array : [var T], compare : (T, T) -> Order.Order) : () {
todo()
};

public func reverse<T>(array : [T]) : [T] {
todo()
};

public func reverseInPlace<T>(array : [var T]) : () {
todo()
};

public func map<T, Y>(array : [T], f : T -> Y) : [Y] = Prim.Array_tabulate<Y>(array.size(), func i = f(array[i]));

public func filter<T>(array : [T], f : T -> Bool) : [T] {
Expand Down Expand Up @@ -72,7 +78,7 @@ module {
todo()
};

public func flatten<T>(arrays : [[T]]) : [T] {
public func flatten<T>(arrays : Iter.Iter<[T]>) : [T] {
todo()
};

Expand All @@ -82,12 +88,10 @@ module {
todo()
};

public func toIter<T>(array : [T]) : Iter.Iter<T> = array.vals();

public func vals<T>(array : [T]) : Iter.Iter<T> = array.vals();

public func keys<T>(array : [T]) : Iter.Iter<Nat> = array.keys();

public func values<T>(array : [T]) : Iter.Iter<T> = array.vals();

public func size<T>(array : [T]) : Nat = array.size();

public func subArray<T>(array : [T], start : Nat, length : Nat) : [T] {
Expand Down
227 changes: 227 additions & 0 deletions src/List.mo
Original file line number Diff line number Diff line change
@@ -0,0 +1,227 @@
/// Original: `vector` Mops package?

import Iter "Iter";
import Order "Order";
import Result "Result";
import { nyi = todo } "Debug";

module {
public type List<T> = (); // Placeholder

public func new<T>() : List<T> {
todo()
};

public func clone<T>(list : List<T>) : List<T> {
todo()
};

public func isEmpty(list : List<Any>) : Bool {
todo()
};

public func size(list : List<Any>) : Bool {
todo()
};

public func contains<T>(list : List<T>, element : T, equal : (T, T) -> Bool) : Bool {
todo()
};

public func containsAll<T>(list : List<T>, subList : List<T>, equal : (T, T) -> Bool) : Bool {
todo()
};

public func equal<T>(list1 : List<T>, list2 : List<T>, equal : (T, T) -> Bool) : Bool {
todo()
};

public func compare<T>(list1 : List<T>, list2 : List<T>, compare : (T, T) -> Order.Order) : Order.Order {
todo()
};

public func push<T>(list : List<T>, item : T) : () {
todo()
};

public func pop<T>(list : List<T>) : ?T {
todo()
};

public func toText<T>(list : List<T>, f : T -> Text) : Text {
todo()
};

public func hash<T>(list : List<T>, hash : T -> Nat32) : Nat32 {
todo()
};

public func indexOf<T>(list : List<T>, element : T, equal : (T, T) -> Bool) : ?Nat {
todo()
};

public func lastIndexOf<T>(list : List<T>, element : T, equal : (T, T) -> Bool) : ?Nat {
todo()
};

public func indexOfList<T>(list : List<T>, subList : List<T>, equal : (T, T) -> Bool) : ?Nat {
todo()
};

public func binarySearch<T>(list : List<T>, element : T, compare : (T, T) -> Order.Order) : ?Nat {
todo()
};

public func subList<T>(list : List<T>, start : Nat, length : Nat) : List<T> {
todo()
};

public func prefix<T>(list : List<T>, length : Nat) : List<T> {
todo()
};

public func isPrefixOf<T>(list : List<T>, prefix : List<T>, equal : (T, T) -> Bool) : Bool {
todo()
};

public func isStrictPrefixOf<T>(list : List<T>, prefix : List<T>, equal : (T, T) -> Bool) : Bool {
todo()
};

public func suffix<T>(list : List<T>, length : Nat) : List<T> {
todo()
};

public func isSuffixOf<T>(list : List<T>, suffix : List<T>, equal : (T, T) -> Bool) : Bool {
todo()
};

public func isStrictSuffixOf<T>(list : List<T>, suffix : List<T>, equal : (T, T) -> Bool) : Bool {
todo()
};

public func max<T>(list : List<T>, compare : (T, T) -> Order.Order) : ?T {
todo()
};

public func min<T>(list : List<T>, compare : (T, T) -> Order.Order) : ?T {
todo()
};

public func all<T>(list : List<T>, predicate : T -> Bool) : Bool {
todo()
};

public func any<T>(list : List<T>, predicate : T -> Bool) : Bool {
todo()
};

public func toArray<T>(list : List<T>) : [T] {
todo()
};

public func toVarArray<T>(list : List<T>) : [var T] {
todo()
};

public func fromArray<T>(array : [T]) : List<T> {
todo()
};

public func fromVarArray<T>(array : [var T]) : List<T> {
todo()
};

public func values<T>(list : List<T>) : Iter.Iter<T> {
todo()
};

public func fromIter<T>(iter : { next : () -> ?T }) : List<T> {
todo()
};

public func trimToSize<T>(list : List<T>) {
todo()
};

public func map<T1, T2>(list : List<T1>, f : T1 -> T2) : List<T2> {
todo()
};

public func flatMap<T1, T2>(list : List<T1>, k : T1 -> Iter.Iter<T2>) : List<T2> {
todo()
};

public func forEach<T>(list : List<T>, f : T -> ()) {
todo()
};

public func filterMap<T1, T2>(list : List<T1>, f : T1 -> ?T2) : List<T2> {
todo()
};

public func mapEntries<T1, T2>(list : List<T1>, f : (Nat, T1) -> T2) : List<T2> {
todo()
};

public func mapResult<T, R, E>(list : List<T>, f : T -> Result.Result<R, E>) : Result.Result<List<R>, E> {
todo()
};

public func foldLeft<A, T>(list : List<T>, base : A, combine : (A, T) -> A) : A {
todo()
};

public func foldRight<T, A>(list : List<T>, base : A, combine : (T, A) -> A) : A {
todo()
};

public func first<T>(list : List<T>) : T = todo();

public func last<T>(list : List<T>) : T = todo();

public func singleton<T>(element : T) : List<T> {
todo()
};

public func reverse<T>(list : List<T>) {
todo()
};

public func merge<T>(list1 : List<T>, list2 : List<T>, compare : (T, T) -> Order.Order) : List<T> {
todo()
};

public func distinct<T>(list : List<T>, equal : (T, T) -> Bool) : List<T> {
todo()
};

public func partition<T>(list : List<T>, predicate : T -> Bool) : (List<T>, List<T>) {
todo()
};

public func split<T>(list : List<T>, index : Nat) : (List<T>, List<T>) {
todo()
};

public func chunk<T>(list : List<T>, size : Nat) : List<List<T>> {
todo()
};

public func flatten<T>(lists : Iter.Iter<List<T>>) : List<T> {
todo()
};

public func zip<T1, T2>(list1 : List<T1>, list2 : List<T2>) : List<(T1, T2)> {
todo()
};

public func zipWith<T1, T2, Z>(list1 : List<T1>, list2 : List<T2>, zip : (T1, T2) -> Z) : List<Z> {
todo()
};

public func filter<T>(list : List<T>, predicate : T -> Bool) : List<T> {
todo()
};

}
22 changes: 14 additions & 8 deletions src/Map.mo
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,10 @@ module {
todo()
};

public func equal<K, V>(map1 : Map<K, V>, map2 : Map<K, V>) : Bool {
todo()
};

public func containsKey<K>(map : Map<K, Any>, key : K, compare : (K, K) -> Order.Order) : Bool {
todo()
};
Expand All @@ -40,16 +44,16 @@ module {
public func add<K, V>(map : Map<K, V>, key : K, value : V, compare : (K, K) -> Order.Order) : () {
todo()
};

public func put<K, V>(map : Map<K, V>, key : K, value : V, compare : (K, K) -> Order.Order) : ?V {
todo()
};

public func delete<K, V>(map : Map<K, V>, key : K, compare : (K, K) -> Order.Order) : () {
public func replaceIfExists<K, V>(map : Map<K, V>, key : K, value : V, compare : (K, K) -> Order.Order) : ?V {
todo()
};

public func take<K, V>(map : Map<K, V>, key : K, compare : (K, K) -> Order.Order) : ?V {
public func delete<K, V>(map : Map<K, V>, key : K, compare : (K, K) -> Order.Order) : () {
todo()
};

Expand All @@ -65,24 +69,26 @@ module {
todo()
};

public func entriesRev<K, V>(map : Map<K, V>) : Iter.Iter<(K, V)> {
public func reverseEntries<K, V>(map : Map<K, V>) : Iter.Iter<(K, V)> {
todo()
};

public func keys<K>(map : Map<K, Any>) : Iter.Iter<K> {
todo()
};

public func vals<V>(map : Map<Any, V>) : Iter.Iter<V> {
public func values<V>(map : Map<Any, V>) : Iter.Iter<V> {
todo()
};

public func toIter<K, V>(map : Map<K, V>) : Iter.Iter<(K, V)> = entries(map);

public func fromIter<K, V>(iter : Iter.Iter<(K, V)>, compare : (K, K) -> Order.Order) : Map<K, V> {
todo()
};

public func filter<K, V>(map : Map<K, V>, f : (K, V) -> Bool) : Map<K, V> {
todo()
};

public func map<K, V1, V2>(map : Map<K, V1>, f : (K, V1) -> V2) : Map<K, V2> {
todo()
};
Expand Down Expand Up @@ -119,7 +125,7 @@ module {
todo()
};

public func toText<K, V>(set : Map<K, V>, kf : K -> Text, vf : V -> Text) : Text {
public func toText<K, V>(map : Map<K, V>, kf : K -> Text, vf : V -> Text) : Text {
todo()
};

Expand Down
12 changes: 9 additions & 3 deletions src/Queue.mo
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,14 @@ module {
todo()
};

public func push<T>(queue : Queue<T>, element : T) : () {
todo()
};

public func pop<T>(queue : Queue<T>) : ?T {
todo()
};

public func pushFront<T>(queue : Queue<T>, element : T) : () {
todo()
};
Expand All @@ -54,12 +62,10 @@ module {
todo()
};

public func vals<T>(queue : Queue<T>) : Iter.Iter<T> {
public func values<T>(queue : Queue<T>) : Iter.Iter<T> {
todo()
};

public func toIter<T>(queue : Queue<T>) : Iter.Iter<T> = vals(queue);

public func toText<T>(queue : Queue<T>, f : T -> Text) : Text {
todo()
};
Expand Down
Loading

0 comments on commit f22d5ba

Please sign in to comment.