Skip to content
IsaacShelton edited this page Nov 16, 2022 · 7 revisions

List

List represents the type of a list.

Specifications

TypeSizePossible ValuesMemory Management ModelFile
List32 bytesLists of a Single TypeOwnership2.7/List.adept

Definition

struct <$T> List (items *$T, length, capacity usize, ownership Ownership)

where

$T is any valid type

Fields

NameTypeDescription
items*$TPointer to raw array of items
lengthusizeLength of items in units
capacityusizeCapacity of items in units
ownershipOwnershipWhether this list is responsible for freeing items

Value Management Definitions

  • func __defer__(this *<$T> List)
  • func __pass__(list POD <$T> List) <$T> List
  • func __array__(this *<$T> List) *$T
  • func __length__(this *<$T> List) usize
  • func __access__(this *<$T> List, index usize) *$T
  • func __assign__(this *<$T> List, other POD <$T> List)
  • implicit func __as__(initializer <$T> InitializerList) <$T> List
  • implicit func __as__(initializer <long> InitializerList) <int> List
  • implicit func __as__(initializer <double> InitializerList) <float> List

List Literals

Lists can be created from initializer lists:

food <String> List = {"Spaghetti", "Pizza", "Garlic Bread"}
board <<int> List> List = {
{0, 0, 0, 0} as <int> List,
{0, 0, 0, 0},
{0, 0, 0, 0},
{0, 0, 0, 0}
}

Memory Management

Lists are automatically freed when they run out of scope.

import basics
func main {
names <String> List
names.add("Isaac")
names.add("Andy")
names.add("Zack")
names.add("Ellie")
// names is freed
}

In order to pass lists around to other scopes, you can use the commit() method. my_list.commit() gives up any ownership held by my_list and returns a copy with the original's ownership:

import basics
func main {
outlives <String> List = getList()
// outlives is freed
}
func getList() <String> List {
shortlived_list <String> List
shortlived_list.add("Apples")
shortlived_list.add("Bananas")
shortlived_list.add("Oranges")
return shortlived_list.commit() // Transfer ownership
}

List Scoping Rules:

  • Lists are freed when they go out of scope
  • Lists are freed when inside a value that goes out of scope
  • Lists can transfer scopes using new_scoped_list = old_scoped_list.commit()
  • Lists are freed when they are returned and never assigned
  • Lists reference the data of other Lists when assigned to them
  • Lists can point to specific parts of other Lists
  • Variables/Parameters marked as POD will not have __pass__ and __defer__ calls automatically made
  • When add()ed to things like other Lists, a reference will be used by default
  • To commit ownership of a list to another List, you must use list_of_lists.add(list.commit())

Functions

  • func List(items *$T, length usize, ownership Ownership = Ownership::REFERENCE) <$T> List

    Constructs a list from individual components.

    [view src]

  • func List(items *$T, length, capacity usize, ownership Ownership = Ownership::REFERENCE) <$T> List

    Constructs a list from individual components.

    [view src]

Methods

  • func add(this *<$T> List, item POD $~T) void

    Adds an item to a list.

    [view src]

  • func add(this *<$T> List) *$T

    Adds a blank zero-initialized item to a list and returns a pointer to the new item.

    [view src]

  • func insert(this *<$T> List, index usize) *$T

    Inserts a blank zero-initialized item into a list and returns a pointer to the new item.

    [view src]

  • func insert(this *<$T> List, index usize, item POD $~T) void

    Inserts an item into a list.

    [view src]

  • func append(this *<$T> List, item POD $~T) void

    Appends an item to a list.

    [view src]

  • func prepend(this *<$T> List, item POD $~T) void

    Prepends an item to a list.

    [view src]

  • func remove(this *<$T> List, index usize) void

    Removes an item from a list.

    [view src]

  • func reserve(this *<$T> List, count usize) void

    Ensures a list can hold at least count items before having to expand.

    [view src]

  • func get(this *<$T> List, index usize) $T

    Gets an item from a list.

    [view src]

  • func getPointer(this *<$T> List, index usize) *$T

    Gets a pointer to an item in a list. The pointer may be invalidated when the list is modified.

    [view src]

  • func clear(this *<$T> List)

    Clears a list.

    [view src]

  • func empty(this *<$T> List) bool

    Returns whether this.length == 0

    [view src]

  • func commit(this *<$T> List) <$T> List

    Changes the ownership of a list to be Ownership::REFERENCE. If the list previously had ownership, then a list value will be returned with Ownership::GIVEN, otherwise the original list will be returned. This method is used for transferring ownership of internal array data of lists to other lists.

    [view src]

  • func donate(this *<$T> List) <$T> List

    If the list has ownership, then the list's ownership will be changed to Ownership::DONOR and a list value will be returned with Ownership::GIVEN, otherwise the original list will be returned. This method is used for transferring ownership of internal array data of lists to other lists. If ownership was transferred, then the subject value will be completely invalidated and will be unable to be used afterwards.

    [view src]

  • func give() <$T> List

    Like commit(), except requires ownership. Not having ownership will cause a runtime error.

    [view src]

  • func reverse(this *<$T> List) void

    Reverses a list.

    [view src]

  • func reduce(this *<$T> List) void

    Removes the last item from a list.

    [view src]

  • func reduce(this *<$T> List, amount usize) void

    Removes the last amount items from a list.

    [view src]

  • func first(this *<$T> List) *$T

    Returns a pointer to the first item in the list. Will return null if the list is empty.

    [view src]

  • func last(this *<$T> List) *$T

    Returns a pointer to the last item in the list. Will return null if the list is empty.

    [view src]

  • func contains(this *<$T> List, value $~T) bool

    Returns whether a list contains an item that is equal to value.

    [view src]

  • func map(this *<$T> List, function func($~T) $S) <$S> List

    Applies function to every item in a list to form another list.

    [view src]

Settings

#default List_bounds_checks true
#default List_error_with_type __typeinfo__
#default List_ownership_checks true
#default List_disable_safety false
#default List_preparation_checks false
#default List_experimental false
#default List_warn_experimental true
#default List_error_on_donor_usage true

Clone this wiki locally

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
List · AdeptLanguage/Adept Wiki · GitHub
Skip to content
IsaacShelton edited this page Nov 16, 2022 · 7 revisions

List

List represents the type of a list.

Specifications

TypeSizePossible ValuesMemory Management ModelFile
List32 bytesLists of a Single TypeOwnership2.7/List.adept

Definition

struct <$T> List (items *$T, length, capacity usize, ownership Ownership)

where

$T is any valid type

Fields

NameTypeDescription
items*$TPointer to raw array of items
lengthusizeLength of items in units
capacityusizeCapacity of items in units
ownershipOwnershipWhether this list is responsible for freeing items

Value Management Definitions

  • func __defer__(this *<$T> List)
  • func __pass__(list POD <$T> List) <$T> List
  • func __array__(this *<$T> List) *$T
  • func __length__(this *<$T> List) usize
  • func __access__(this *<$T> List, index usize) *$T
  • func __assign__(this *<$T> List, other POD <$T> List)
  • implicit func __as__(initializer <$T> InitializerList) <$T> List
  • implicit func __as__(initializer <long> InitializerList) <int> List
  • implicit func __as__(initializer <double> InitializerList) <float> List

List Literals

Lists can be created from initializer lists:

food <String> List = {"Spaghetti", "Pizza", "Garlic Bread"}
board <<int> List> List = {
{0, 0, 0, 0} as <int> List,
{0, 0, 0, 0},
{0, 0, 0, 0},
{0, 0, 0, 0}
}

Memory Management

Lists are automatically freed when they run out of scope.

import basics
func main {
names <String> List
names.add("Isaac")
names.add("Andy")
names.add("Zack")
names.add("Ellie")
// names is freed
}

In order to pass lists around to other scopes, you can use the commit() method. my_list.commit() gives up any ownership held by my_list and returns a copy with the original's ownership:

import basics
func main {
outlives <String> List = getList()
// outlives is freed
}
func getList() <String> List {
shortlived_list <String> List
shortlived_list.add("Apples")
shortlived_list.add("Bananas")
shortlived_list.add("Oranges")
return shortlived_list.commit() // Transfer ownership
}

List Scoping Rules:

  • Lists are freed when they go out of scope
  • Lists are freed when inside a value that goes out of scope
  • Lists can transfer scopes using new_scoped_list = old_scoped_list.commit()
  • Lists are freed when they are returned and never assigned
  • Lists reference the data of other Lists when assigned to them
  • Lists can point to specific parts of other Lists
  • Variables/Parameters marked as POD will not have __pass__ and __defer__ calls automatically made
  • When add()ed to things like other Lists, a reference will be used by default
  • To commit ownership of a list to another List, you must use list_of_lists.add(list.commit())

Functions

  • func List(items *$T, length usize, ownership Ownership = Ownership::REFERENCE) <$T> List

    Constructs a list from individual components.

    [view src]

  • func List(items *$T, length, capacity usize, ownership Ownership = Ownership::REFERENCE) <$T> List

    Constructs a list from individual components.

    [view src]

Methods

  • func add(this *<$T> List, item POD $~T) void

    Adds an item to a list.

    [view src]

  • func add(this *<$T> List) *$T

    Adds a blank zero-initialized item to a list and returns a pointer to the new item.

    [view src]

  • func insert(this *<$T> List, index usize) *$T

    Inserts a blank zero-initialized item into a list and returns a pointer to the new item.

    [view src]

  • func insert(this *<$T> List, index usize, item POD $~T) void

    Inserts an item into a list.

    [view src]

  • func append(this *<$T> List, item POD $~T) void

    Appends an item to a list.

    [view src]

  • func prepend(this *<$T> List, item POD $~T) void

    Prepends an item to a list.

    [view src]

  • func remove(this *<$T> List, index usize) void

    Removes an item from a list.

    [view src]

  • func reserve(this *<$T> List, count usize) void

    Ensures a list can hold at least count items before having to expand.

    [view src]

  • func get(this *<$T> List, index usize) $T

    Gets an item from a list.

    [view src]

  • func getPointer(this *<$T> List, index usize) *$T

    Gets a pointer to an item in a list. The pointer may be invalidated when the list is modified.

    [view src]

  • func clear(this *<$T> List)

    Clears a list.

    [view src]

  • func empty(this *<$T> List) bool

    Returns whether this.length == 0

    [view src]

  • func commit(this *<$T> List) <$T> List

    Changes the ownership of a list to be Ownership::REFERENCE. If the list previously had ownership, then a list value will be returned with Ownership::GIVEN, otherwise the original list will be returned. This method is used for transferring ownership of internal array data of lists to other lists.

    [view src]

  • func donate(this *<$T> List) <$T> List

    If the list has ownership, then the list's ownership will be changed to Ownership::DONOR and a list value will be returned with Ownership::GIVEN, otherwise the original list will be returned. This method is used for transferring ownership of internal array data of lists to other lists. If ownership was transferred, then the subject value will be completely invalidated and will be unable to be used afterwards.

    [view src]

  • func give() <$T> List

    Like commit(), except requires ownership. Not having ownership will cause a runtime error.

    [view src]

  • func reverse(this *<$T> List) void

    Reverses a list.

    [view src]

  • func reduce(this *<$T> List) void

    Removes the last item from a list.

    [view src]

  • func reduce(this *<$T> List, amount usize) void

    Removes the last amount items from a list.

    [view src]

  • func first(this *<$T> List) *$T

    Returns a pointer to the first item in the list. Will return null if the list is empty.

    [view src]

  • func last(this *<$T> List) *$T

    Returns a pointer to the last item in the list. Will return null if the list is empty.

    [view src]

  • func contains(this *<$T> List, value $~T) bool

    Returns whether a list contains an item that is equal to value.

    [view src]

  • func map(this *<$T> List, function func($~T) $S) <$S> List

    Applies function to every item in a list to form another list.

    [view src]

Settings

#default List_bounds_checks true
#default List_error_with_type __typeinfo__
#default List_ownership_checks true
#default List_disable_safety false
#default List_preparation_checks false
#default List_experimental false
#default List_warn_experimental true
#default List_error_on_donor_usage true

Clone this wiki locally

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' List · AdeptLanguage/Adept Wiki · GitHub
Skip to content
IsaacShelton edited this page Nov 16, 2022 · 7 revisions

List

List represents the type of a list.

Specifications

TypeSizePossible ValuesMemory Management ModelFile
List32 bytesLists of a Single TypeOwnership2.7/List.adept

Definition

struct <$T> List (items *$T, length, capacity usize, ownership Ownership)

where

$T is any valid type

Fields

NameTypeDescription
items*$TPointer to raw array of items
lengthusizeLength of items in units
capacityusizeCapacity of items in units
ownershipOwnershipWhether this list is responsible for freeing items

Value Management Definitions

  • func __defer__(this *<$T> List)
  • func __pass__(list POD <$T> List) <$T> List
  • func __array__(this *<$T> List) *$T
  • func __length__(this *<$T> List) usize
  • func __access__(this *<$T> List, index usize) *$T
  • func __assign__(this *<$T> List, other POD <$T> List)
  • implicit func __as__(initializer <$T> InitializerList) <$T> List
  • implicit func __as__(initializer <long> InitializerList) <int> List
  • implicit func __as__(initializer <double> InitializerList) <float> List

List Literals

Lists can be created from initializer lists:

food <String> List = {"Spaghetti", "Pizza", "Garlic Bread"}
board <<int> List> List = {
{0, 0, 0, 0} as <int> List,
{0, 0, 0, 0},
{0, 0, 0, 0},
{0, 0, 0, 0}
}

Memory Management

Lists are automatically freed when they run out of scope.

import basics
func main {
names <String> List
names.add("Isaac")
names.add("Andy")
names.add("Zack")
names.add("Ellie")
// names is freed
}

In order to pass lists around to other scopes, you can use the commit() method. my_list.commit() gives up any ownership held by my_list and returns a copy with the original's ownership:

import basics
func main {
outlives <String> List = getList()
// outlives is freed
}
func getList() <String> List {
shortlived_list <String> List
shortlived_list.add("Apples")
shortlived_list.add("Bananas")
shortlived_list.add("Oranges")
return shortlived_list.commit() // Transfer ownership
}

List Scoping Rules:

  • Lists are freed when they go out of scope
  • Lists are freed when inside a value that goes out of scope
  • Lists can transfer scopes using new_scoped_list = old_scoped_list.commit()
  • Lists are freed when they are returned and never assigned
  • Lists reference the data of other Lists when assigned to them
  • Lists can point to specific parts of other Lists
  • Variables/Parameters marked as POD will not have __pass__ and __defer__ calls automatically made
  • When add()ed to things like other Lists, a reference will be used by default
  • To commit ownership of a list to another List, you must use list_of_lists.add(list.commit())

Functions

  • func List(items *$T, length usize, ownership Ownership = Ownership::REFERENCE) <$T> List

    Constructs a list from individual components.

    [view src]

  • func List(items *$T, length, capacity usize, ownership Ownership = Ownership::REFERENCE) <$T> List

    Constructs a list from individual components.

    [view src]

Methods

  • func add(this *<$T> List, item POD $~T) void

    Adds an item to a list.

    [view src]

  • func add(this *<$T> List) *$T

    Adds a blank zero-initialized item to a list and returns a pointer to the new item.

    [view src]

  • func insert(this *<$T> List, index usize) *$T

    Inserts a blank zero-initialized item into a list and returns a pointer to the new item.

    [view src]

  • func insert(this *<$T> List, index usize, item POD $~T) void

    Inserts an item into a list.

    [view src]

  • func append(this *<$T> List, item POD $~T) void

    Appends an item to a list.

    [view src]

  • func prepend(this *<$T> List, item POD $~T) void

    Prepends an item to a list.

    [view src]

  • func remove(this *<$T> List, index usize) void

    Removes an item from a list.

    [view src]

  • func reserve(this *<$T> List, count usize) void

    Ensures a list can hold at least count items before having to expand.

    [view src]

  • func get(this *<$T> List, index usize) $T

    Gets an item from a list.

    [view src]

  • func getPointer(this *<$T> List, index usize) *$T

    Gets a pointer to an item in a list. The pointer may be invalidated when the list is modified.

    [view src]

  • func clear(this *<$T> List)

    Clears a list.

    [view src]

  • func empty(this *<$T> List) bool

    Returns whether this.length == 0

    [view src]

  • func commit(this *<$T> List) <$T> List

    Changes the ownership of a list to be Ownership::REFERENCE. If the list previously had ownership, then a list value will be returned with Ownership::GIVEN, otherwise the original list will be returned. This method is used for transferring ownership of internal array data of lists to other lists.

    [view src]

  • func donate(this *<$T> List) <$T> List

    If the list has ownership, then the list's ownership will be changed to Ownership::DONOR and a list value will be returned with Ownership::GIVEN, otherwise the original list will be returned. This method is used for transferring ownership of internal array data of lists to other lists. If ownership was transferred, then the subject value will be completely invalidated and will be unable to be used afterwards.

    [view src]

  • func give() <$T> List

    Like commit(), except requires ownership. Not having ownership will cause a runtime error.

    [view src]

  • func reverse(this *<$T> List) void

    Reverses a list.

    [view src]

  • func reduce(this *<$T> List) void

    Removes the last item from a list.

    [view src]

  • func reduce(this *<$T> List, amount usize) void

    Removes the last amount items from a list.

    [view src]

  • func first(this *<$T> List) *$T

    Returns a pointer to the first item in the list. Will return null if the list is empty.

    [view src]

  • func last(this *<$T> List) *$T

    Returns a pointer to the last item in the list. Will return null if the list is empty.

    [view src]

  • func contains(this *<$T> List, value $~T) bool

    Returns whether a list contains an item that is equal to value.

    [view src]

  • func map(this *<$T> List, function func($~T) $S) <$S> List

    Applies function to every item in a list to form another list.

    [view src]

Settings

#default List_bounds_checks true
#default List_error_with_type __typeinfo__
#default List_ownership_checks true
#default List_disable_safety false
#default List_preparation_checks false
#default List_experimental false
#default List_warn_experimental true
#default List_error_on_donor_usage true

Clone this wiki locally

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' List · AdeptLanguage/Adept Wiki · GitHub
Skip to content
IsaacShelton edited this page Nov 16, 2022 · 7 revisions

List

List represents the type of a list.

Specifications

TypeSizePossible ValuesMemory Management ModelFile
List32 bytesLists of a Single TypeOwnership2.7/List.adept

Definition

struct <$T> List (items *$T, length, capacity usize, ownership Ownership)

where

$T is any valid type

Fields

NameTypeDescription
items*$TPointer to raw array of items
lengthusizeLength of items in units
capacityusizeCapacity of items in units
ownershipOwnershipWhether this list is responsible for freeing items

Value Management Definitions

  • func __defer__(this *<$T> List)
  • func __pass__(list POD <$T> List) <$T> List
  • func __array__(this *<$T> List) *$T
  • func __length__(this *<$T> List) usize
  • func __access__(this *<$T> List, index usize) *$T
  • func __assign__(this *<$T> List, other POD <$T> List)
  • implicit func __as__(initializer <$T> InitializerList) <$T> List
  • implicit func __as__(initializer <long> InitializerList) <int> List
  • implicit func __as__(initializer <double> InitializerList) <float> List

List Literals

Lists can be created from initializer lists:

food <String> List = {"Spaghetti", "Pizza", "Garlic Bread"}
board <<int> List> List = {
{0, 0, 0, 0} as <int> List,
{0, 0, 0, 0},
{0, 0, 0, 0},
{0, 0, 0, 0}
}

Memory Management

Lists are automatically freed when they run out of scope.

import basics
func main {
names <String> List
names.add("Isaac")
names.add("Andy")
names.add("Zack")
names.add("Ellie")
// names is freed
}

In order to pass lists around to other scopes, you can use the commit() method. my_list.commit() gives up any ownership held by my_list and returns a copy with the original's ownership:

import basics
func main {
outlives <String> List = getList()
// outlives is freed
}
func getList() <String> List {
shortlived_list <String> List
shortlived_list.add("Apples")
shortlived_list.add("Bananas")
shortlived_list.add("Oranges")
return shortlived_list.commit() // Transfer ownership
}

List Scoping Rules:

  • Lists are freed when they go out of scope
  • Lists are freed when inside a value that goes out of scope
  • Lists can transfer scopes using new_scoped_list = old_scoped_list.commit()
  • Lists are freed when they are returned and never assigned
  • Lists reference the data of other Lists when assigned to them
  • Lists can point to specific parts of other Lists
  • Variables/Parameters marked as POD will not have __pass__ and __defer__ calls automatically made
  • When add()ed to things like other Lists, a reference will be used by default
  • To commit ownership of a list to another List, you must use list_of_lists.add(list.commit())

Functions

  • func List(items *$T, length usize, ownership Ownership = Ownership::REFERENCE) <$T> List

    Constructs a list from individual components.

    [view src]

  • func List(items *$T, length, capacity usize, ownership Ownership = Ownership::REFERENCE) <$T> List

    Constructs a list from individual components.

    [view src]

Methods

  • func add(this *<$T> List, item POD $~T) void

    Adds an item to a list.

    [view src]

  • func add(this *<$T> List) *$T

    Adds a blank zero-initialized item to a list and returns a pointer to the new item.

    [view src]

  • func insert(this *<$T> List, index usize) *$T

    Inserts a blank zero-initialized item into a list and returns a pointer to the new item.

    [view src]

  • func insert(this *<$T> List, index usize, item POD $~T) void

    Inserts an item into a list.

    [view src]

  • func append(this *<$T> List, item POD $~T) void

    Appends an item to a list.

    [view src]

  • func prepend(this *<$T> List, item POD $~T) void

    Prepends an item to a list.

    [view src]

  • func remove(this *<$T> List, index usize) void

    Removes an item from a list.

    [view src]

  • func reserve(this *<$T> List, count usize) void

    Ensures a list can hold at least count items before having to expand.

    [view src]

  • func get(this *<$T> List, index usize) $T

    Gets an item from a list.

    [view src]

  • func getPointer(this *<$T> List, index usize) *$T

    Gets a pointer to an item in a list. The pointer may be invalidated when the list is modified.

    [view src]

  • func clear(this *<$T> List)

    Clears a list.

    [view src]

  • func empty(this *<$T> List) bool

    Returns whether this.length == 0

    [view src]

  • func commit(this *<$T> List) <$T> List

    Changes the ownership of a list to be Ownership::REFERENCE. If the list previously had ownership, then a list value will be returned with Ownership::GIVEN, otherwise the original list will be returned. This method is used for transferring ownership of internal array data of lists to other lists.

    [view src]

  • func donate(this *<$T> List) <$T> List

    If the list has ownership, then the list's ownership will be changed to Ownership::DONOR and a list value will be returned with Ownership::GIVEN, otherwise the original list will be returned. This method is used for transferring ownership of internal array data of lists to other lists. If ownership was transferred, then the subject value will be completely invalidated and will be unable to be used afterwards.

    [view src]

  • func give() <$T> List

    Like commit(), except requires ownership. Not having ownership will cause a runtime error.

    [view src]

  • func reverse(this *<$T> List) void

    Reverses a list.

    [view src]

  • func reduce(this *<$T> List) void

    Removes the last item from a list.

    [view src]

  • func reduce(this *<$T> List, amount usize) void

    Removes the last amount items from a list.

    [view src]

  • func first(this *<$T> List) *$T

    Returns a pointer to the first item in the list. Will return null if the list is empty.

    [view src]

  • func last(this *<$T> List) *$T

    Returns a pointer to the last item in the list. Will return null if the list is empty.

    [view src]

  • func contains(this *<$T> List, value $~T) bool

    Returns whether a list contains an item that is equal to value.

    [view src]

  • func map(this *<$T> List, function func($~T) $S) <$S> List

    Applies function to every item in a list to form another list.

    [view src]

Settings

#default List_bounds_checks true
#default List_error_with_type __typeinfo__
#default List_ownership_checks true
#default List_disable_safety false
#default List_preparation_checks false
#default List_experimental false
#default List_warn_experimental true
#default List_error_on_donor_usage true

Clone this wiki locally

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' List · AdeptLanguage/Adept Wiki · GitHub
Skip to content
IsaacShelton edited this page Nov 16, 2022 · 7 revisions

List

List represents the type of a list.

Specifications

TypeSizePossible ValuesMemory Management ModelFile
List32 bytesLists of a Single TypeOwnership2.7/List.adept

Definition

struct <$T> List (items *$T, length, capacity usize, ownership Ownership)

where

$T is any valid type

Fields

NameTypeDescription
items*$TPointer to raw array of items
lengthusizeLength of items in units
capacityusizeCapacity of items in units
ownershipOwnershipWhether this list is responsible for freeing items

Value Management Definitions

  • func __defer__(this *<$T> List)
  • func __pass__(list POD <$T> List) <$T> List
  • func __array__(this *<$T> List) *$T
  • func __length__(this *<$T> List) usize
  • func __access__(this *<$T> List, index usize) *$T
  • func __assign__(this *<$T> List, other POD <$T> List)
  • implicit func __as__(initializer <$T> InitializerList) <$T> List
  • implicit func __as__(initializer <long> InitializerList) <int> List
  • implicit func __as__(initializer <double> InitializerList) <float> List

List Literals

Lists can be created from initializer lists:

food <String> List = {"Spaghetti", "Pizza", "Garlic Bread"}
board <<int> List> List = {
{0, 0, 0, 0} as <int> List,
{0, 0, 0, 0},
{0, 0, 0, 0},
{0, 0, 0, 0}
}

Memory Management

Lists are automatically freed when they run out of scope.

import basics
func main {
names <String> List
names.add("Isaac")
names.add("Andy")
names.add("Zack")
names.add("Ellie")
// names is freed
}

In order to pass lists around to other scopes, you can use the commit() method. my_list.commit() gives up any ownership held by my_list and returns a copy with the original's ownership:

import basics
func main {
outlives <String> List = getList()
// outlives is freed
}
func getList() <String> List {
shortlived_list <String> List
shortlived_list.add("Apples")
shortlived_list.add("Bananas")
shortlived_list.add("Oranges")
return shortlived_list.commit() // Transfer ownership
}

List Scoping Rules:

  • Lists are freed when they go out of scope
  • Lists are freed when inside a value that goes out of scope
  • Lists can transfer scopes using new_scoped_list = old_scoped_list.commit()
  • Lists are freed when they are returned and never assigned
  • Lists reference the data of other Lists when assigned to them
  • Lists can point to specific parts of other Lists
  • Variables/Parameters marked as POD will not have __pass__ and __defer__ calls automatically made
  • When add()ed to things like other Lists, a reference will be used by default
  • To commit ownership of a list to another List, you must use list_of_lists.add(list.commit())

Functions

  • func List(items *$T, length usize, ownership Ownership = Ownership::REFERENCE) <$T> List

    Constructs a list from individual components.

    [view src]

  • func List(items *$T, length, capacity usize, ownership Ownership = Ownership::REFERENCE) <$T> List

    Constructs a list from individual components.

    [view src]

Methods

  • func add(this *<$T> List, item POD $~T) void

    Adds an item to a list.

    [view src]

  • func add(this *<$T> List) *$T

    Adds a blank zero-initialized item to a list and returns a pointer to the new item.

    [view src]

  • func insert(this *<$T> List, index usize) *$T

    Inserts a blank zero-initialized item into a list and returns a pointer to the new item.

    [view src]

  • func insert(this *<$T> List, index usize, item POD $~T) void

    Inserts an item into a list.

    [view src]

  • func append(this *<$T> List, item POD $~T) void

    Appends an item to a list.

    [view src]

  • func prepend(this *<$T> List, item POD $~T) void

    Prepends an item to a list.

    [view src]

  • func remove(this *<$T> List, index usize) void

    Removes an item from a list.

    [view src]

  • func reserve(this *<$T> List, count usize) void

    Ensures a list can hold at least count items before having to expand.

    [view src]

  • func get(this *<$T> List, index usize) $T

    Gets an item from a list.

    [view src]

  • func getPointer(this *<$T> List, index usize) *$T

    Gets a pointer to an item in a list. The pointer may be invalidated when the list is modified.

    [view src]

  • func clear(this *<$T> List)

    Clears a list.

    [view src]

  • func empty(this *<$T> List) bool

    Returns whether this.length == 0

    [view src]

  • func commit(this *<$T> List) <$T> List

    Changes the ownership of a list to be Ownership::REFERENCE. If the list previously had ownership, then a list value will be returned with Ownership::GIVEN, otherwise the original list will be returned. This method is used for transferring ownership of internal array data of lists to other lists.

    [view src]

  • func donate(this *<$T> List) <$T> List

    If the list has ownership, then the list's ownership will be changed to Ownership::DONOR and a list value will be returned with Ownership::GIVEN, otherwise the original list will be returned. This method is used for transferring ownership of internal array data of lists to other lists. If ownership was transferred, then the subject value will be completely invalidated and will be unable to be used afterwards.

    [view src]

  • func give() <$T> List

    Like commit(), except requires ownership. Not having ownership will cause a runtime error.

    [view src]

  • func reverse(this *<$T> List) void

    Reverses a list.

    [view src]

  • func reduce(this *<$T> List) void

    Removes the last item from a list.

    [view src]

  • func reduce(this *<$T> List, amount usize) void

    Removes the last amount items from a list.

    [view src]

  • func first(this *<$T> List) *$T

    Returns a pointer to the first item in the list. Will return null if the list is empty.

    [view src]

  • func last(this *<$T> List) *$T

    Returns a pointer to the last item in the list. Will return null if the list is empty.

    [view src]

  • func contains(this *<$T> List, value $~T) bool

    Returns whether a list contains an item that is equal to value.

    [view src]

  • func map(this *<$T> List, function func($~T) $S) <$S> List

    Applies function to every item in a list to form another list.

    [view src]

Settings

#default List_bounds_checks true
#default List_error_with_type __typeinfo__
#default List_ownership_checks true
#default List_disable_safety false
#default List_preparation_checks false
#default List_experimental false
#default List_warn_experimental true
#default List_error_on_donor_usage true

Clone this wiki locally

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' List · AdeptLanguage/Adept Wiki · GitHub
Skip to content
IsaacShelton edited this page Nov 16, 2022 · 7 revisions

List

List represents the type of a list.

Specifications

TypeSizePossible ValuesMemory Management ModelFile
List32 bytesLists of a Single TypeOwnership2.7/List.adept

Definition

struct <$T> List (items *$T, length, capacity usize, ownership Ownership)

where

$T is any valid type

Fields

NameTypeDescription
items*$TPointer to raw array of items
lengthusizeLength of items in units
capacityusizeCapacity of items in units
ownershipOwnershipWhether this list is responsible for freeing items

Value Management Definitions

  • func __defer__(this *<$T> List)
  • func __pass__(list POD <$T> List) <$T> List
  • func __array__(this *<$T> List) *$T
  • func __length__(this *<$T> List) usize
  • func __access__(this *<$T> List, index usize) *$T
  • func __assign__(this *<$T> List, other POD <$T> List)
  • implicit func __as__(initializer <$T> InitializerList) <$T> List
  • implicit func __as__(initializer <long> InitializerList) <int> List
  • implicit func __as__(initializer <double> InitializerList) <float> List

List Literals

Lists can be created from initializer lists:

food <String> List = {"Spaghetti", "Pizza", "Garlic Bread"}
board <<int> List> List = {
{0, 0, 0, 0} as <int> List,
{0, 0, 0, 0},
{0, 0, 0, 0},
{0, 0, 0, 0}
}

Memory Management

Lists are automatically freed when they run out of scope.

import basics
func main {
names <String> List
names.add("Isaac")
names.add("Andy")
names.add("Zack")
names.add("Ellie")
// names is freed
}

In order to pass lists around to other scopes, you can use the commit() method. my_list.commit() gives up any ownership held by my_list and returns a copy with the original's ownership:

import basics
func main {
outlives <String> List = getList()
// outlives is freed
}
func getList() <String> List {
shortlived_list <String> List
shortlived_list.add("Apples")
shortlived_list.add("Bananas")
shortlived_list.add("Oranges")
return shortlived_list.commit() // Transfer ownership
}

List Scoping Rules:

  • Lists are freed when they go out of scope
  • Lists are freed when inside a value that goes out of scope
  • Lists can transfer scopes using new_scoped_list = old_scoped_list.commit()
  • Lists are freed when they are returned and never assigned
  • Lists reference the data of other Lists when assigned to them
  • Lists can point to specific parts of other Lists
  • Variables/Parameters marked as POD will not have __pass__ and __defer__ calls automatically made
  • When add()ed to things like other Lists, a reference will be used by default
  • To commit ownership of a list to another List, you must use list_of_lists.add(list.commit())

Functions

  • func List(items *$T, length usize, ownership Ownership = Ownership::REFERENCE) <$T> List

    Constructs a list from individual components.

    [view src]

  • func List(items *$T, length, capacity usize, ownership Ownership = Ownership::REFERENCE) <$T> List

    Constructs a list from individual components.

    [view src]

Methods

  • func add(this *<$T> List, item POD $~T) void

    Adds an item to a list.

    [view src]

  • func add(this *<$T> List) *$T

    Adds a blank zero-initialized item to a list and returns a pointer to the new item.

    [view src]

  • func insert(this *<$T> List, index usize) *$T

    Inserts a blank zero-initialized item into a list and returns a pointer to the new item.

    [view src]

  • func insert(this *<$T> List, index usize, item POD $~T) void

    Inserts an item into a list.

    [view src]

  • func append(this *<$T> List, item POD $~T) void

    Appends an item to a list.

    [view src]

  • func prepend(this *<$T> List, item POD $~T) void

    Prepends an item to a list.

    [view src]

  • func remove(this *<$T> List, index usize) void

    Removes an item from a list.

    [view src]

  • func reserve(this *<$T> List, count usize) void

    Ensures a list can hold at least count items before having to expand.

    [view src]

  • func get(this *<$T> List, index usize) $T

    Gets an item from a list.

    [view src]

  • func getPointer(this *<$T> List, index usize) *$T

    Gets a pointer to an item in a list. The pointer may be invalidated when the list is modified.

    [view src]

  • func clear(this *<$T> List)

    Clears a list.

    [view src]

  • func empty(this *<$T> List) bool

    Returns whether this.length == 0

    [view src]

  • func commit(this *<$T> List) <$T> List

    Changes the ownership of a list to be Ownership::REFERENCE. If the list previously had ownership, then a list value will be returned with Ownership::GIVEN, otherwise the original list will be returned. This method is used for transferring ownership of internal array data of lists to other lists.

    [view src]

  • func donate(this *<$T> List) <$T> List

    If the list has ownership, then the list's ownership will be changed to Ownership::DONOR and a list value will be returned with Ownership::GIVEN, otherwise the original list will be returned. This method is used for transferring ownership of internal array data of lists to other lists. If ownership was transferred, then the subject value will be completely invalidated and will be unable to be used afterwards.

    [view src]

  • func give() <$T> List

    Like commit(), except requires ownership. Not having ownership will cause a runtime error.

    [view src]

  • func reverse(this *<$T> List) void

    Reverses a list.

    [view src]

  • func reduce(this *<$T> List) void

    Removes the last item from a list.

    [view src]

  • func reduce(this *<$T> List, amount usize) void

    Removes the last amount items from a list.

    [view src]

  • func first(this *<$T> List) *$T

    Returns a pointer to the first item in the list. Will return null if the list is empty.

    [view src]

  • func last(this *<$T> List) *$T

    Returns a pointer to the last item in the list. Will return null if the list is empty.

    [view src]

  • func contains(this *<$T> List, value $~T) bool

    Returns whether a list contains an item that is equal to value.

    [view src]

  • func map(this *<$T> List, function func($~T) $S) <$S> List

    Applies function to every item in a list to form another list.

    [view src]

Settings

#default List_bounds_checks true
#default List_error_with_type __typeinfo__
#default List_ownership_checks true
#default List_disable_safety false
#default List_preparation_checks false
#default List_experimental false
#default List_warn_experimental true
#default List_error_on_donor_usage true

Clone this wiki locally

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' List · AdeptLanguage/Adept Wiki · GitHub
Skip to content
IsaacShelton edited this page Nov 16, 2022 · 7 revisions

List

List represents the type of a list.

Specifications

TypeSizePossible ValuesMemory Management ModelFile
List32 bytesLists of a Single TypeOwnership2.7/List.adept

Definition

struct <$T> List (items *$T, length, capacity usize, ownership Ownership)

where

$T is any valid type

Fields

NameTypeDescription
items*$TPointer to raw array of items
lengthusizeLength of items in units
capacityusizeCapacity of items in units
ownershipOwnershipWhether this list is responsible for freeing items

Value Management Definitions

  • func __defer__(this *<$T> List)
  • func __pass__(list POD <$T> List) <$T> List
  • func __array__(this *<$T> List) *$T
  • func __length__(this *<$T> List) usize
  • func __access__(this *<$T> List, index usize) *$T
  • func __assign__(this *<$T> List, other POD <$T> List)
  • implicit func __as__(initializer <$T> InitializerList) <$T> List
  • implicit func __as__(initializer <long> InitializerList) <int> List
  • implicit func __as__(initializer <double> InitializerList) <float> List

List Literals

Lists can be created from initializer lists:

food <String> List = {"Spaghetti", "Pizza", "Garlic Bread"}
board <<int> List> List = {
{0, 0, 0, 0} as <int> List,
{0, 0, 0, 0},
{0, 0, 0, 0},
{0, 0, 0, 0}
}

Memory Management

Lists are automatically freed when they run out of scope.

import basics
func main {
names <String> List
names.add("Isaac")
names.add("Andy")
names.add("Zack")
names.add("Ellie")
// names is freed
}

In order to pass lists around to other scopes, you can use the commit() method. my_list.commit() gives up any ownership held by my_list and returns a copy with the original's ownership:

import basics
func main {
outlives <String> List = getList()
// outlives is freed
}
func getList() <String> List {
shortlived_list <String> List
shortlived_list.add("Apples")
shortlived_list.add("Bananas")
shortlived_list.add("Oranges")
return shortlived_list.commit() // Transfer ownership
}

List Scoping Rules:

  • Lists are freed when they go out of scope
  • Lists are freed when inside a value that goes out of scope
  • Lists can transfer scopes using new_scoped_list = old_scoped_list.commit()
  • Lists are freed when they are returned and never assigned
  • Lists reference the data of other Lists when assigned to them
  • Lists can point to specific parts of other Lists
  • Variables/Parameters marked as POD will not have __pass__ and __defer__ calls automatically made
  • When add()ed to things like other Lists, a reference will be used by default
  • To commit ownership of a list to another List, you must use list_of_lists.add(list.commit())

Functions

  • func List(items *$T, length usize, ownership Ownership = Ownership::REFERENCE) <$T> List

    Constructs a list from individual components.

    [view src]

  • func List(items *$T, length, capacity usize, ownership Ownership = Ownership::REFERENCE) <$T> List

    Constructs a list from individual components.

    [view src]

Methods

  • func add(this *<$T> List, item POD $~T) void

    Adds an item to a list.

    [view src]

  • func add(this *<$T> List) *$T

    Adds a blank zero-initialized item to a list and returns a pointer to the new item.

    [view src]

  • func insert(this *<$T> List, index usize) *$T

    Inserts a blank zero-initialized item into a list and returns a pointer to the new item.

    [view src]

  • func insert(this *<$T> List, index usize, item POD $~T) void

    Inserts an item into a list.

    [view src]

  • func append(this *<$T> List, item POD $~T) void

    Appends an item to a list.

    [view src]

  • func prepend(this *<$T> List, item POD $~T) void

    Prepends an item to a list.

    [view src]

  • func remove(this *<$T> List, index usize) void

    Removes an item from a list.

    [view src]

  • func reserve(this *<$T> List, count usize) void

    Ensures a list can hold at least count items before having to expand.

    [view src]

  • func get(this *<$T> List, index usize) $T

    Gets an item from a list.

    [view src]

  • func getPointer(this *<$T> List, index usize) *$T

    Gets a pointer to an item in a list. The pointer may be invalidated when the list is modified.

    [view src]

  • func clear(this *<$T> List)

    Clears a list.

    [view src]

  • func empty(this *<$T> List) bool

    Returns whether this.length == 0

    [view src]

  • func commit(this *<$T> List) <$T> List

    Changes the ownership of a list to be Ownership::REFERENCE. If the list previously had ownership, then a list value will be returned with Ownership::GIVEN, otherwise the original list will be returned. This method is used for transferring ownership of internal array data of lists to other lists.

    [view src]

  • func donate(this *<$T> List) <$T> List

    If the list has ownership, then the list's ownership will be changed to Ownership::DONOR and a list value will be returned with Ownership::GIVEN, otherwise the original list will be returned. This method is used for transferring ownership of internal array data of lists to other lists. If ownership was transferred, then the subject value will be completely invalidated and will be unable to be used afterwards.

    [view src]

  • func give() <$T> List

    Like commit(), except requires ownership. Not having ownership will cause a runtime error.

    [view src]

  • func reverse(this *<$T> List) void

    Reverses a list.

    [view src]

  • func reduce(this *<$T> List) void

    Removes the last item from a list.

    [view src]

  • func reduce(this *<$T> List, amount usize) void

    Removes the last amount items from a list.

    [view src]

  • func first(this *<$T> List) *$T

    Returns a pointer to the first item in the list. Will return null if the list is empty.

    [view src]

  • func last(this *<$T> List) *$T

    Returns a pointer to the last item in the list. Will return null if the list is empty.

    [view src]

  • func contains(this *<$T> List, value $~T) bool

    Returns whether a list contains an item that is equal to value.

    [view src]

  • func map(this *<$T> List, function func($~T) $S) <$S> List

    Applies function to every item in a list to form another list.

    [view src]

Settings

#default List_bounds_checks true
#default List_error_with_type __typeinfo__
#default List_ownership_checks true
#default List_disable_safety false
#default List_preparation_checks false
#default List_experimental false
#default List_warn_experimental true
#default List_error_on_donor_usage true

Clone this wiki locally

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); List · AdeptLanguage/Adept Wiki · GitHub
Skip to content
IsaacShelton edited this page Nov 16, 2022 · 7 revisions

List

List represents the type of a list.

Specifications

TypeSizePossible ValuesMemory Management ModelFile
List32 bytesLists of a Single TypeOwnership2.7/List.adept

Definition

struct <$T> List (items *$T, length, capacity usize, ownership Ownership)

where

$T is any valid type

Fields

NameTypeDescription
items*$TPointer to raw array of items
lengthusizeLength of items in units
capacityusizeCapacity of items in units
ownershipOwnershipWhether this list is responsible for freeing items

Value Management Definitions

  • func __defer__(this *<$T> List)
  • func __pass__(list POD <$T> List) <$T> List
  • func __array__(this *<$T> List) *$T
  • func __length__(this *<$T> List) usize
  • func __access__(this *<$T> List, index usize) *$T
  • func __assign__(this *<$T> List, other POD <$T> List)
  • implicit func __as__(initializer <$T> InitializerList) <$T> List
  • implicit func __as__(initializer <long> InitializerList) <int> List
  • implicit func __as__(initializer <double> InitializerList) <float> List

List Literals

Lists can be created from initializer lists:

food <String> List = {"Spaghetti", "Pizza", "Garlic Bread"}
board <<int> List> List = {
{0, 0, 0, 0} as <int> List,
{0, 0, 0, 0},
{0, 0, 0, 0},
{0, 0, 0, 0}
}

Memory Management

Lists are automatically freed when they run out of scope.

import basics
func main {
names <String> List
names.add("Isaac")
names.add("Andy")
names.add("Zack")
names.add("Ellie")
// names is freed
}

In order to pass lists around to other scopes, you can use the commit() method. my_list.commit() gives up any ownership held by my_list and returns a copy with the original's ownership:

import basics
func main {
outlives <String> List = getList()
// outlives is freed
}
func getList() <String> List {
shortlived_list <String> List
shortlived_list.add("Apples")
shortlived_list.add("Bananas")
shortlived_list.add("Oranges")
return shortlived_list.commit() // Transfer ownership
}

List Scoping Rules:

  • Lists are freed when they go out of scope
  • Lists are freed when inside a value that goes out of scope
  • Lists can transfer scopes using new_scoped_list = old_scoped_list.commit()
  • Lists are freed when they are returned and never assigned
  • Lists reference the data of other Lists when assigned to them
  • Lists can point to specific parts of other Lists
  • Variables/Parameters marked as POD will not have __pass__ and __defer__ calls automatically made
  • When add()ed to things like other Lists, a reference will be used by default
  • To commit ownership of a list to another List, you must use list_of_lists.add(list.commit())

Functions

  • func List(items *$T, length usize, ownership Ownership = Ownership::REFERENCE) <$T> List

    Constructs a list from individual components.

    [view src]

  • func List(items *$T, length, capacity usize, ownership Ownership = Ownership::REFERENCE) <$T> List

    Constructs a list from individual components.

    [view src]

Methods

  • func add(this *<$T> List, item POD $~T) void

    Adds an item to a list.

    [view src]

  • func add(this *<$T> List) *$T

    Adds a blank zero-initialized item to a list and returns a pointer to the new item.

    [view src]

  • func insert(this *<$T> List, index usize) *$T

    Inserts a blank zero-initialized item into a list and returns a pointer to the new item.

    [view src]

  • func insert(this *<$T> List, index usize, item POD $~T) void

    Inserts an item into a list.

    [view src]

  • func append(this *<$T> List, item POD $~T) void

    Appends an item to a list.

    [view src]

  • func prepend(this *<$T> List, item POD $~T) void

    Prepends an item to a list.

    [view src]

  • func remove(this *<$T> List, index usize) void

    Removes an item from a list.

    [view src]

  • func reserve(this *<$T> List, count usize) void

    Ensures a list can hold at least count items before having to expand.

    [view src]

  • func get(this *<$T> List, index usize) $T

    Gets an item from a list.

    [view src]

  • func getPointer(this *<$T> List, index usize) *$T

    Gets a pointer to an item in a list. The pointer may be invalidated when the list is modified.

    [view src]

  • func clear(this *<$T> List)

    Clears a list.

    [view src]

  • func empty(this *<$T> List) bool

    Returns whether this.length == 0

    [view src]

  • func commit(this *<$T> List) <$T> List

    Changes the ownership of a list to be Ownership::REFERENCE. If the list previously had ownership, then a list value will be returned with Ownership::GIVEN, otherwise the original list will be returned. This method is used for transferring ownership of internal array data of lists to other lists.

    [view src]

  • func donate(this *<$T> List) <$T> List

    If the list has ownership, then the list's ownership will be changed to Ownership::DONOR and a list value will be returned with Ownership::GIVEN, otherwise the original list will be returned. This method is used for transferring ownership of internal array data of lists to other lists. If ownership was transferred, then the subject value will be completely invalidated and will be unable to be used afterwards.

    [view src]

  • func give() <$T> List

    Like commit(), except requires ownership. Not having ownership will cause a runtime error.

    [view src]

  • func reverse(this *<$T> List) void

    Reverses a list.

    [view src]

  • func reduce(this *<$T> List) void

    Removes the last item from a list.

    [view src]

  • func reduce(this *<$T> List, amount usize) void

    Removes the last amount items from a list.

    [view src]

  • func first(this *<$T> List) *$T

    Returns a pointer to the first item in the list. Will return null if the list is empty.

    [view src]

  • func last(this *<$T> List) *$T

    Returns a pointer to the last item in the list. Will return null if the list is empty.

    [view src]

  • func contains(this *<$T> List, value $~T) bool

    Returns whether a list contains an item that is equal to value.

    [view src]

  • func map(this *<$T> List, function func($~T) $S) <$S> List

    Applies function to every item in a list to form another list.

    [view src]

Settings

#default List_bounds_checks true
#default List_error_with_type __typeinfo__
#default List_ownership_checks true
#default List_disable_safety false
#default List_preparation_checks false
#default List_experimental false
#default List_warn_experimental true
#default List_error_on_donor_usage true

Clone this wiki locally